我使用的解決方案是,在我的模板處理程序中,不是使用Posts.find()返回遊標,而是創建了一個JSON對象,該對象具有可以由句柄模板處理的結構(類別數組對象,其中每一類都有樁的陣列):
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;
的模板是這樣的(但表而不是UL,只是使用UL爲清潔的演示在這裏):
{{#each categorizedPosts}}
{{category}}
<ul>
{{#each posts}}
<li>{{posts.title}}</li>
{{/each}}
</ul>
{{/each}}
請注意,當你返回一個像這樣的對象(而不是一個光標對象Posts.find()返回),Meteor的模板引擎失去了智能檢測集合中只有一個對象何時發生更改的能力,並修補了DOM,而不是完全重新呈現模板。因此,在這種情況下,即使在數據庫中更新單個Posts對象,該模板也會被完全重新渲染。這是缺點。但有利的是,它的工作原理;)
而不是返回所有帖子,你可以按類別返回它?將類別存儲在單獨的集合中。 – Prashant 2013-03-07 06:18:39
每個類別{ 每個帖子{ 渲染 } } – Prashant 2013-03-07 06:47:58