2015-02-20 3 views
0

В моем приложении ember у меня сценарий, где я хочу отображать последний, но один элемент массива по-другому.Найти последний, но один элемент в #each помощнике в ember

{{#each item in model}} 
    {{#if lastButOneItem}} 
     + {{item}} 
    {{else}} 
     {{item}} + 
    {{/if}} 
{{/each}} 

Но я не уверен, как установить условие для lastButOneItem. Есть ли простой способ добиться этого?

Я попытался назначить элемент ItemController для этого. Но я не могу получить общее количество элементов из этого элемента управления и текущего индекса.

Любая помощь пожалуйста.

ответ

2

Существуют различные подходы в Эмбер к этой старой проблемы, но это, вероятно, проще всего справиться с этим на уровне CSS:

{{#each item in model}} 
    <span class="item">{{item}}</span> 
{{/each}} 
.item     ::after { content: " + "; } 
.item:nth-last-child(2) ::after { content: ""; } 
.item:nth-last-child(2) ::before { content: " + "; } 

Альтернативой было бы построить массив строк в контроллере или просмотреть или компонент:

displayItems: function() { 
    var model = this.get('model'); 
    var len = model.length; 

    return model.map(function(item, idx) { 
     return idx === len - 2 ? " + " + item : item + " + "; 
    }); 
} . property('[email protected]') 
{{#each item in displayItems}} 
    {{item}} 
{{/each}} 
+0

Спасибо за обходные. Второй кажется более удобным. – Presse

Смежные вопросы