summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/views/auto_view.js.coffee
blob: 7f09be54f6a5b59f4a99c64263c67dea1e084a20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class csx.AutoView extends Backbone.View
  @views: {}
  @constructors: {}

  @viewName: (name) ->
    @constructors[name] = this
    @::name = name

  @install: (element) ->
    name = $(element).data('autoview')
    constructor = @constructors[name]
    @create(name, element, constructor)

  @create: (name, element, constructor) ->
    if constructor == undefined
      console.error("Could not find autoview at #{name}")
      return

    view = new constructor
      el: element
      $el: $(element)
      model: @discoverModel($(element))
    view.render()
    key = name.replace(".", '-')
    @views[key] ?= []
    @views[key].push(view)

  @discoverModel: (element) ->
    modelName = element.data('automodel')
    return if _.isUndefined(modelName)
    new csx.Models[modelName]()

  render: -> @