我们说我有一个帖子集合,其数据如下:
var post1 = {
title: "First post",
post: "Post content",
comments: [<comment id>, <another comment id>, <etc>]
};
我有一个相应的评论集。我已发布并订阅了这两个系列,并希望显示一篇包含该评论的帖子。
如何显示该特定帖子的评论?
<template name="post">
<h1>{{title}}</h1>
<p>{{post}}</p>
{{#each comments}}
// Only have access to the ID
{{/each}}
</template>
我可以像这样创建一个帮手:
Template.post.helpers({
displayComment: function(id) {
return Comments.findOne(id).fetch().comment;
}
});
并且做:
<template name="post">
<h1>{{title}}</h1>
<p>{{post}}</p>
{{#each comments}}
{{displayComment @index}}
{{/each}}
</template>
但是我必须为每个评论对象的属性等创建一个帮助器。
干净的方法是什么?我不想填充帖子对象上的评论字段,因为这意味着调用.fetch(),帖子将不再是被动的。
答案 0 :(得分:1)
一些建议:
<template name="post">
<h1>{{title}}</h1>
<p>{{post}}</p>
{{#each comments}}
{{#with commentDetails}}
{{userName}} //
{{content}} // These are properties of a comment document
{{upvotes}} //
{{/with}}
{{/each}}
</template>
Template.post.helpers({
commentDetails: function() {
return Comments.findOne(this);
}
});
这将通过查找当前with
(_id
中this
的值,将每个commentDetails
块中的数据上下文设置为返回的注释对象each
块中的帮助器。
另一种方法是单独使用each
块,但让它迭代游标:
<template name="post">
<h1>{{title}}</h1>
<p>{{post}}</p>
{{#each commentCursor}}
{{content}}
... // other properties
{{/each}}
</template>
Template.post.helpers({
commentCursor: function() {
return Comments.find({_id: {$in: this.comments}});
}
});