使用流星 0.8.x
我正在尝试用集合中的两列文档填充模板。一栏一半,另一栏一半。我能想到的最好的办法是遍历集合两次,每边一次,并使用索引或计数器来跟踪偶数/奇数。空格键没有@index 或@even @odd。在 stackoverflow 和 ggroup 中有很多关于这个的讨论,但我不确定如何在我自己的助手中正确地做到这一点。
试过这个模板:
<div class="row">
<article>
{{#each post}}
{{#if oddCounter}}
{{> templatePost}}
{{/if}}
{{/each}}
</article>
<article>
{{#each post}}
{{#if evenCounter}}
{{> templatePost}}
{{/if}}
{{/each}}
</article>
</div>
使用这些助手:
var evenPost = 0;
var oddPost = 0;
Template.dashboard.helpers({
evenCounter: function () {
return (evenPost++ % 2 === 0);
},
oddCounter: function () {
return !(oddPost++ % 2 === 0);
},
posts: function () {
return Posts.find();
}
});
一方面,这看起来很粗糙,并且最初确实有效。但它实际上有一个缺陷,即无论何时更改文档并重新绘制模板(templatePost),它都会迭代oddCounter / evenCounter变量并将项目移动到另一列。不知道如何解决这个问题。
我计算每个帖子的方法是否完全有缺陷?
你能重构它以防止 Meteor 在重绘时增加吗?
也许使用自定义 .map 和 cursor 函数在客户端向集合添加索引?(在Discover Meteor 书中看到了这一点,但无法正常工作)。
谢谢!
更新 1:D 先生的解决方案有效,但我能够从 Animations 章节中获得Discover Meteor 示例并坚持使用它。
Template.dashboard.helpers({
posts: function () {
var index = 0;
var posts = Posts.find();
return posts.map(function(post, index, cursor) {
post._index = index++;
return post;
});
},
even: function () {
return (this._index % 2) === 0;
}
});
更新 2:为了减少几行代码,删除奇数计数器并{{#unless even}}
在您的模板中使用以跟踪奇数文档。