Как связать выбранный список с SproutCore 2.0 и Handlebars - PullRequest
1 голос
/ 23 ноября 2011

С учетом следующего объекта SC.View:

var view = SC.View.create({
  templateName: 'people',
  people: [],
  selectedPersonId: null});

и шаблона Handlebars следующих людей:

<select>
  {{#each people}}
  <option {{bindAttr id="id"}}>{{name}}</option>
  {{/each}}
</select>

Как лучше всего связать selectedPersonId со списком выбора?

(@ stackoverflow: репутация 1500+ для создания новых тегов? Правда? .... # sproutcore20 #handlebars)

1 Ответ

0 голосов
/ 23 ноября 2011

Возможно, вы захотите создать собственное представление для этого. Я использую один реализованный в CoffeeScript, который выглядит в основном так:

MyApp.SelectionView = SC.CollectionView.extend
    tagName: 'select'
    value: null

    willInsertElement: ->
        @_elementValueDidChange()

    change: ->
        @_elementValueDidChange()

    _elementValueDidChange: ->
        views = SC.View.views
        selectedOptions = @$('option:selected')
        ### Multiple selections
        @set('value', selectedOptions.toArray().map( (el) ->
            SC.get(views[el.id], 'content')
        ))
        ###
        @set('value', SC.get(views[selectedOptions.prop('id')], 'content'))

Как вы можете легко заметить, это для одного выбора. Используйте закомментированный код, чтобы обновить его до множественного выбора.

Существует также запрос на выборку для представления select (между тем его автор закрыл его, поскольку он не использует новый код метафоры), см. https://github.com/sproutcore/sproutcore20/pull/65. Если вы все еще на бета-версии 3, этот патч должен предоставить функциональность выбора для вас.

...