2012-12-21 98 views
1

實際上,我正在尋找讓視圖負責標記集合視圖中第一個或最後一個項目的方法,並且我發現這一個How do I add a separator between elements in an {{#each}} loop except after the last element? 。但我不想定義itemViewClass模板的attrs(classNames for例如)在JavaScript中,我可以只使用{{itemView}}助手或東西來定義一個itemView模板?Ember是否可以與{{#collection}}一起使用{{itemView}}助手?

{{#collection contentBinding="dataList" tagName="ol" classNames="list" itemViewClass="ItemView"}} 
    {{#itemView classNames="item" classNamesBinding="isLastItem:last"}} 
     item templates 
    {{/itemView}} 
{{/collection}} 

雖然這可以通過其他方式解決,但我只想知道是否可以找到內置的支持。而且我搜索了很長時間,就是找不到Ember.Handlebars.collection的文檔,它不在最新的API文檔中。

+0

您正在尋找'itemClassNames'及類似物品。文檔是[here](https://github.com/emberjs/ember.js/blob/v1.0.0-pre.2/packages/ember-handlebars/lib/helpers/collection.js),但看起來像某些原因,它沒有被編譯到API文檔中。編輯 - 看起來像「{{collection}}」已被棄用。您仍然可以通過選中複選框來查看文檔 –

+0

感謝您的建議。 'itemClassNames'很有用,但'itemClassNameBindings'似乎不起作用,或者我可能以錯誤的方式使用它。我稍後會在這裏舉一個例子。 – LiZn

+0

您是使用'itemClassNameBindings'還是'itemClassNameBinding'? –

回答

0

從Emberjs的主版本開始,您可以嘗試使用自定義Handlebars「bound」助手。 它會是這個樣子:

{{#each item in collection}} 
    {{#isLastElement item}} 
     template if last 
    {{else}} 
     template if not 
    {{/isLastElement}}  

    both templates 
{{/each}} 


Ember.Handlebars.registerBoundHelper('islastElement', 
    function(item, options) { 
    if(functionTellingIfThisIsLastElement(item)) 
      return options.fn(this); 
    else 
      return options.inverse(this); 
    } 
); 

這只是另一種方式來看待事物,用functionTellingIfThisIsLastElement要麼找徵收或者您的項目一個性質的研究。要訪問這個集合,你必須在這裏改變一些東西,以獲得好的上下文+參數,這取決於你的代碼。

相關問題