2011-11-23 55 views
1

以下SC.View對象綁定鑑於:如何選擇列表用SproutCore 2.0和把手

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

和下面的人把手模板:

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

什麼將是最好的方式將selectedPersonId綁定到選擇列表?

(@stackoverflow:1500+的聲譽,創造新的標籤真的....#sproutcore20 #handlebars?)

回答

0

你可能要爲此創建自定義視圖。我使用一個在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')) 

正如你可以很容易地發現,這是一個單一的選擇。使用註釋掉的代碼將其升級爲多選。

還有一個選擇視圖的拉取請求(同時由於它沒有使用新的隱喻代碼,因此它被作者關閉),請參閱https://github.com/sproutcore/sproutcore20/pull/65。如果您仍在使用beta3,此修補程序應爲您提供選擇功能。

+0

因此,從拉請求我猜你看起來你還需要一個SC.SelectOption呈現

+0

這可能是beta3中的情況。在master中,這不再是必要的,因爲「select」現在是集合處理程序已知的標記之一。事實並非如此,但我不確定這是在beta3之前還是之後推出的。 – Steffen

+0

剛剛檢查。拉取請求基於SC2的原始測試版本。在那裏,對beta2中的收藏視圖進行了幾處更改。由於我沒有使用建議的補丁程序,因此我無法驗證它是否仍在工作。 – Steffen