MeteorJS中同一页面上的嵌套列表

时间:2014-01-16 20:56:53

标签: meteor

我在同一页面上有三个列表,我想用列表项填充。列表项通过名为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>

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

作为一般建议,我会避免收集和发布具有通用名称的功能,如“列表”和“项目”。我发现它使代码难以理解。话虽如此,我认为这里的混淆是关于与发布函数关联的名称和底层集合的名称。

发布函数的名称(在这种情况下为listItems)仅用于促进订阅的激活,并且没有其他含义。该函数将Cards集合中的一组文档发布到客户端。随后应使用Cards集合从客户端的本地数据库中检索这些文档。

所以我认为你要找的代码是:

listItems: function() {
  return Cards.find({listId: this._id});
}

运行listItems帮助程序的上下文是List文档的上下文。因此listId的ID应为this._id。如果由于某种原因这不起作用,请告诉我。