我正在使用{{#each}}遍历Meteor中的一个集合,我想知道我是否在最后一个元素中,就像我在AngularJS中可以做的那样,同时使用带有$ last的ngRepeat。
例如,它可用于构建人类可读的枚举,例如“我喜欢猫,狗和海豚”:
Template.myTemplate.helpers({
likedAnimals: function(){return ['dogs','cats','dolphins'];}
});
<template name='myTemplate'>
I like
{{#each likedAnimals}}
{{#if !$first && !$last}}, {{/if}}
{{#if $last}} and {{/if}}
{{this}}
{{/each}}
</template>
有没有办法在Meteor中检查这个条件?
答案 0 :(得分:7)
如果你们中的任何一个想知道如何对收集游标进行同样的操作,那么感谢handlebar-helpers包就会有更简单的方法。
然后你可以使用:
$ mapped - 将$ first,$ last和$ index映射到光标或数组
结合模板中的$ last helper:
{{#each $mapped myCursor}}
{{name}}{{#unless $last}},{{/unless}}
{{/each}}
PS:这也适用于数组
答案 1 :(得分:6)
Template.registerHelper('last',
function(list, elem) {
return _.last(list) === elem;
}
);
<template name='myTemplate'>
{{#each likedAnimals}}
{{#if last ../likedAnimals this}} I'm the last ! {{/if}}
{{/each}}
</template>
使用meteor 1.1.0.1处理我的反应数据源(我不知道什么时候在流星中引入了Template.parentData())。
答案 2 :(得分:1)
meteor(版本1.0)不支持此功能,但您可以通过执行以下操作来自行添加:
Template.myTemplate.helpers({
likedAnimals: function(){
var animals = ['dogs','cats','dolphins']
return animals.map(function(animal, index){
return {
name: animal,
isFirst: index==0,
isLast: index==animals.length-1
}
})
}
})
然而,这对反应性起作用并不好(使其在反应性方面正常工作要困难得多,我想这就是为什么它还没有内置功能),但是如果你返回一个简单的数组& #39;不依赖于任何被动数据源,这应该可以正常工作。