灰烬-如果每个中都有lastItem

时间:2018-09-24 17:35:17

标签: ember.js

我试图在每个余烬中的最后一个项目下显示一个标记-我尝试了类似@last的方法-但它返回错误

<ul>
  {{#each people as |person index|}}
    <li>Hello, {{person.name}}! You're number {{index}} in line</li>
  {{/each}}
</ul>

1 个答案:

答案 0 :(得分:3)

Ember的{{each}}模板助手没有提供简便的方法。

您可能已经发现,可以使用{{unless index}}有条件地在第一个对象上渲染内容。之所以可行,是因为索引从零开始,并且0被认为是错误的。

您可以结合使用ember-truth-helpersember-math-helpers来实现与最后一个元素相当的效果。两者都是维护良好的余烬插件,可提供全套模板帮助程序。

Ember-truth-helpers提供了一个eq帮助程序,它增加了对模板中的相等比较的支持。灰烬辅助函数提供了一个sub辅助函数,可以从模板的另一个辅助函数中减去一个值。结合它们,我们可以建立一个仅对最后一个元素成立的条件:

{{#each items as |item index|}}
  <li>
    {{item}}
    {{#unless index}}(first){{/unless}}
    {{#if (eq index (sub items.length 1))}}(last){{/if}}
  </li>
{{/each}}

您在这里发现了余烬旋转,证明了这种方法:https://ember-twiddle.com/6ea05a2e9c884bd772eefabc91173d08?openFiles=templates.application.hbs%2C

如果数组是Ember.NativeArray,则更加简单。余烬的NativeArray提供了lastObject property,它指向数组中的最后一项。您可以直接将其用于相等比较,就像@Gaurav在评论中指出的:{{#if (eg item items.lastObject)}}(last){{/if}}