我在同一页面上有三个列表,我想用列表项填充。列表项通过名为listId
的字段与列表相关联我的出版物:
Meteor.publish('lists', function(options) {
return Lists.find({}, options);
});
Meteor.publish('listItems', function(listId) {
return Cards.find({listId: listId});
});
我的list-page.js(this._id param与iron-router一起传递。):
Template.listsPage.helpers({
lists: function(){
return Lists.find({listsPageId: this._id});
},
listItems: function(listId){
//??
return ListItems.find({listId: listId})
}
});
我的list-page.html:
<template name="listsPage">
{{#each lists}}
<ul>
<li>{{title}}</li>
{{#each listItems}}
<li>{{listItemTitle}}</li>
{/each}
{{#each lists}}
</template>
非常感谢任何帮助!
答案 0 :(得分:0)
作为一般建议,我会避免收集和发布具有通用名称的功能,如“列表”和“项目”。我发现它使代码难以理解。话虽如此,我认为这里的混淆是关于与发布函数关联的名称和底层集合的名称。
发布函数的名称(在这种情况下为listItems
)仅用于促进订阅的激活,并且没有其他含义。该函数将Cards
集合中的一组文档发布到客户端。随后应使用Cards
集合从客户端的本地数据库中检索这些文档。
所以我认为你要找的代码是:
listItems: function() {
return Cards.find({listId: this._id});
}
运行listItems
帮助程序的上下文是List
文档的上下文。因此listId
的ID应为this._id
。如果由于某种原因这不起作用,请告诉我。