Meteor:如何在多个表中显示集合,其中每个表都是一组具有相同键值的对象?
假设你有一堆博客帖子,每个帖子都有一个“标题”和“类别”。如果每组文章都有一个表,并且具有相同的“类别”值,那么如何在单个页面上呈现所有文章标题 我从按类别排序开始,因此相同类别中的帖子在光标中分组:Meteor:如何在多个表中显示集合,其中每个表都是一组具有相同键值的对象?,meteor,collections,Meteor,Collections,假设你有一堆博客帖子,每个帖子都有一个“标题”和“类别”。如果每组文章都有一个表,并且具有相同的“类别”值,那么如何在单个页面上呈现所有文章标题 我从按类别排序开始,因此相同类别中的帖子在光标中分组: Template.postLists.posts = function() { return Posts.find({}, {sort:{category:1}}); } 但是我正在努力通过{{{each}}在模板中迭代这个列表,并使用手柄来检测何时到达一个新的“类别”,这样我就可以开始一个
Template.postLists.posts = function() {
return Posts.find({}, {sort:{category:1}});
}
但是我正在努力通过{{{each}}在模板中迭代这个列表,并使用手柄来检测何时到达一个新的“类别”,这样我就可以开始一个新的,然后在类别结束时结束这个列表
我是不是走错了路,还是有一个简单的方法可以做到这一点?我使用的解决方案是,在我的模板处理程序中,我没有使用Posts.find()返回游标,而是创建了一个JSON对象,该对象的结构可以由Handlebar模板处理(类别对象数组,其中每个类别都有一个帖子数组): 模板是这样的(但是使用表而不是UL,只是在这里使用UL进行更干净的演示):
{{#每个分类主题}
{{category}}
{{{#每个帖子}
- {{posts.title}
{{/每个}}
{{/每个}}
请注意,当您像这样返回一个对象(而不是Posts.find()返回的游标对象)时,Meteor的模板引擎失去了智能检测集合中只有一个对象发生更改的能力,并且无法修补DOM而不是完全重新呈现模板。因此,在这种情况下,即使数据库中更新了一个POST对象,模板也会完全重新呈现。这是缺点。但优点是它可以工作;)您可以按类别返回它,而不是返回所有帖子?将类别存储在单独的集合中。每个类别{each post{render}
Template.postLists.categorizedPosts = function() {
var allPosts = Posts.find({}, {sort:{category:1}}).fetch();
// Then I iterate over allPosts with a loop,
// creating a new array of this structure:
// for ...
var catPosts = [ { category:"cat1", posts: [ {post1}, {post2} ] },
{ category:"cat2", posts: [ {post3}, {post4}, {post5} ] },
// etc...
];
// end loop
return catPosts;
{{#each categorizedPosts}}
{{category}}
<ul>
{{#each posts}}
<li>{{posts.title}}</li>
{{/each}}
</ul>
{{/each}}