Sha256: c48f5668c394c56f450ecb90d026c3a0056d282778b6b072962cf7241536d622

Contents?: true

Size: 1.89 KB

Versions: 2

Compression:

Stored size: 1.89 KB

Contents

# Two ways to createa a Select dropdown
#
# Start with a Backbone Collection and a specified label
#
# select_view = new classes.SelectView({
#   collection:some_collection,
#   label: "name"
# })
#
# Start with an array
#
# select_view = new classes.SelectView({
#   values: ["rune","steve","zach"]
# })

class classes.SelectView extends Backbone.View

  defaults: {label: 'label'}
  className: "select-dropdown"

  initialize: (options) ->
    @rendered = false

    @label = if options.label then options.label else "label"
    @helper = options.helper if options.helper?

    # The select view needs a collection.
    if !@collection
      @collection = @collection_from_values(options.values)
    else if @collection.length > 0
      t = @
      @collection.each (model,@label) -> t.set_model_label(model)

    @template = JST["templates/select"]
    @listenTo(@collection, 'add', @add_model)
    @listenTo(@collection, 'remove', @render)
    @listenTo(@, 'rendered', @bind_select)

  collection_from_values: (values) ->
    @collection = new Backbone.Collection(_.map(values, (v) ->
      return {"label": v}
    ))

  add_model: (m) ->
    @set_model_label(m)
    @$el.find('select').first().append("<option>#{m.get('label')}</option>")

  set_model_label: (model) =>
    model.set('label',model.get(@label))

  bind_select: ->
    t = @
    @rendered = true
    @select = new Select({
      el: @$el.find('select')[0]
      className: 'select-theme-atlas'
    })

    @select.on('change', (v) ->
      selected_model = t.collection.find((model) -> model.get(t.label) is v.value)
      t.trigger('change', selected_model)
    )

  get_value: -> @select.value
  get_model: ->
    value = @select.value
    @collection.find (model) => model.get('label') is value

  set: (value) -> @select.change(value)

  render: ->
    @$el.html(@template({models:@collection.models, helper:@helper}))
    @trigger('rendered') if !@rendered
    @

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
atlas_assets-0.8.0 lib/assets/javascripts/views/select.coffee
atlas_assets-0.7.3 lib/assets/javascripts/views/select.coffee