如何在 Meteor 中使用 #each 块实现最后一项的条件?
Posted
技术标签:
【中文标题】如何在 Meteor 中使用 #each 块实现最后一项的条件?【英文标题】:How do I implement condition for last item with #each block in Meteor? 【发布时间】:2014-05-27 10:01:57 【问题描述】:我已将我的流星应用程序升级到 0.8.0,现在车把自定义助手已停止工作,助手允许我在最后一项附加到列表时更改行为,有谁知道我怎么能得到车把助手再次工作,或者我如何让这个功能与最新版本的流星一起工作,谢谢!
助手代码(Original Link)
Handlebars.registerHelper("foreach", function(arr, options)
if(options.inverse && !arr.length)
return options.inverse(this);
return arr.map(function(item, index)
item.$index = index;
item.$first = index === 0;
item.$last = index === arr.length - 1;
return options.fn(item);
).join('');
);
【问题讨论】:
【参考方案1】:制作助手:
Template.registerHelper( 'isLastEach', ( arr, idx ) =>
return arr.length == idx+1 ? true : false;
);
使用内置 @index 帮助器的示例:
#each yourArray
getNickname this#unless isLastEach yourArray @index ,/unless
/each
【讨论】:
【参考方案2】:我几乎已经编写了自己的辅助函数,在它适用于我之前它可能不是最简单的解决方案(现在!)
eachLastItem = function (arr)
if(arr.length > 0)
if(typeof arr[0] == "object")
var cnt = lastItem = 0;
_.each(arr, function(obj)
(cnt != arr.length - 1) ? lastItem = 0 : lastItem = 1;
_.extend(arr[cnt], __lastItem: lastItem);
cnt++; );
else
var cnt = lastItem = 0;
var newArr = [];
_.each(arr, function(str)
(cnt != arr.length - 1) ? lastItem = 0 : lastItem = 1;
var newObj =
str: str,
__lastItem: lastItem
newArr.push(newObj);
cnt++;
);
arr = newArr;
return arr;
else
return null;
在模板中,我使用这个:
#each array
<li>str</li>
#if __lastItem
!
else
/if
/each
【讨论】:
我正在尝试使用它,但 #if __lastItem 没有为我返回数组的最后一个索引。 (每个索引都是一个对象)【参考方案3】:Meteor 已将 Handlebars 命名空间迁移到 UI
UI.registerHelper("foreach", function(arr, options)
return arr.map(function(item, index)
item.$index = index;
item.$first = index === 0;
item.$last = index === arr.length - 1;
return options.fn(item);
).join('');
);
【讨论】:
嘿彭特!感谢您的回答,我现在有一个新问题,我无法将数组传递给帮助程序 #foreach foo/foreach 并且它给了我以下错误:“Deps 重新计算函数的异常: TypeError: 无法读取未定义的属性“逆” 啊,我明白了,我认为它比我最初想象的要复杂。另一种想法:您是否尝试过使用 jQuery 修改列表? Blaze 引擎与此更兼容以上是关于如何在 Meteor 中使用 #each 块实现最后一项的条件?的主要内容,如果未能解决你的问题,请参考以下文章
在 Meteor 中的字符串数组上使用 Handlebars #each 进行迭代
Meteor js:使用#each 来迭代和渲染博客的多个 html 文件中的模板