在Meteor中使用#each,检查是否'最后'已到达集合中的元素
In Meteor using #each, check if 'last' element in the collection reached
我正在Meteor中使用{{#each}}迭代一个集合,我想知道我是否在最后一个元素中,就像我在AngularJS中使用ngRepeat和$last一样。
例如,它可以用来构建人类可读的枚举,比如"我喜欢猫、狗和海豚":
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中检查这种情况吗?
如果你们中有人想知道如何使用集合游标进行同样的操作,那么多亏了handlebal-helpers包,有一种更简单的方法。
然后你可以使用:
$mapped-将$first、$last和$index映射到您的光标或数组上
与模板中的$last helper组合,如下所示:
{{#each $mapped myCursor}}
{{name}}{{#unless $last}},{{/unless}}
{{/each}}
PS:这也适用于阵列
使用undercore.js:
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>
使用流星1.1.0.1为我处理了一个反应性数据源(我不知道Template.PparentData()是什么时候在流星中引入的)。
Metroet(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
}
})
}
})
然而,这对反应性来说并不好(让它与反应性一起正常工作要困难得多,我想这就是为什么这还不是一个内置功能的原因),但如果你返回一个不依赖于任何反应性数据源的简单数组,这应该可以很好地工作。
相关文章:
- 使用数据上的角度更改设置集合的第一个元素的动画
- 如何查找流星集合中最后一个元素/对象的id
- 如何更改与Backbone集合中的模型相关联的几个元素的css属性
- 根据Meteor集合中的元素数量更改css
- 在元素集合上使用拼接
- 如何获取jQuery集合中的第k个元素..作为JQUERY元素
- 正在使用AngularJS获取集合中的选定元素.声明性方法
- 如何使用javascript将两个dom元素集合合并到第三个集合中
- jquery集合元素悬停
- 将事件处理程序分配给元素集合
- 如何计算字符串集合(0.5000个元素)的哈希代码
- 是否存在非IE等价物“;所有“;元素集合
- 使用for.of迭代时删除集合中的元素是否安全
- 未从具有 .splice(index, 1) 的集合中删除的元素
- 我可以在数组中的元素集合周围 $.wrap() 吗?
- 如何按顺序将类添加到元素集合
- 在集合中查找空的输入元素 - jQuery
- ES6:在设置/映射迭代期间从集合/映射中删除元素是否危险
- 在 Backbone.js 中为集合中的一个元素创建详细信息页面
- 当我们使用 CSS 选择器时,浏览器如何找到集合元素