2013-03-04 101 views
2

我想使用Ember.js視圖呈現集合。下面是我的要求:使用Ember.js視圖呈現集合

  1. 我不想生成兩個的Metamorph腳本標記爲集合中的每個項目,DOM結構應嚴格公正上行線路及LIS(我不介意LIS內metamorphs)
  2. 我收藏中的每件商品都有一個選定的屬性。根據這個屬性值我想所選類別設置爲LI
  3. 我想在模板中定義了整個事情,並使用JavaScript的這個模板只有一個視圖 - 無需額外類

使用{{each}}幫手不滿足第一個要求。使用{{collection}}我無法conditionally分配CSS類到LI(我不是說這是不可能的,只是不知道如何)。看起來有可能滿足1.和2.如果我的LI被定義爲Ember.View,但最終我爲簡單用例寫了大量的樣板文件。

這裏的jsbin與我的代碼,目標是讓我的名字顯示爲粗體,我想知道是否有可能。

回答

2

我認爲如果不編寫一個項目視圖類,你就無法離開。這不是太大的樣板,但:

App.MyItemView = Ember.View.extend({ 
    classNameBindings: 'content.selected:selected' 
}); 

把手:

{{#collection contentBinding="view.options" itemViewClass="App.MyItemView" 
       tagName="ul" itemTagName="li"}} 
    {{view.content.selected}} – {{view.content.name}} 
{{/collection}} 

我的選擇將是一個項目的內容包裝成一個額外的元素:

{{#collection contentBinding="view.options" tagName="ul" itemTagName="li"}} 
    <div {{bindAttr class="view.content.selected:selected"}}> 
    {{view.content.selected}} &ndash; {{view.content.name}} 
    </div> 
{{/collection}} 

並相應地調整CSS:

li > .selected { 
    font-weight: bold; 
} 

這樣您不需要創建視圖類,但我不確定HTML結構的更改是否可以接受。

+0

謝謝!結構改變當然不受歡迎,但可能是現在最好的方式。但我認爲應該將更好的解決方案烘焙到Ember中。 – VoY 2013-03-04 13:29:06