所以我有2个收集如下 收集用户,文档可能如下所示
{_"id":"xyz",
"name":"sam"
}
收集项目,更多链接到用户集合的文档如下
{_"id":"123345",
"userid":"xyz"
"item":"potato"
}
{_"id":"3456",
"userid":"xyz"
"item":"tomato"
}
现在假设我正在运行查询以显示名称为sam的所有文档,如下所示(将作为帮助程序运行)
return User.find({name:"sam"});
我将记录传递到blaze模板并使用{{#each}}显示值。
现在,另外我还要显示集合“items”中的数据以及集合“users”。因此,使用{{#each}}后,我在html中的数据可能如下所示
<li> sam ...potato, tomato </li>
<li> sam ...potato, tomato, orange </li>
<li> sam ...pineapple </li>
<li> sam ... </li>
即使用#each从2个不同的集合中显示数据。
有人能告诉我模板中的代码应该是什么样的吗?
答案 0 :(得分:1)
您可以在发布用户时使用publish-composite package。 (参见链接中的示例1)
因此,对于您的用例,应该有类似的工作:
Meteor.publishComposite('userItems', {
find: function() {
return Users.find({
name: "sam"
},
{
sort: {
...
},
fields: {
...
}
});
},
children: [{
find: function(user) {
return Items.find({
userid: user._id
}, {
fields: {
"item": true,
...
}
});
}}]
});
答案 1 :(得分:1)
这里的解决方案是将参数传递给助手。这应该有点棘手:
1)知道如何传递参数:
让我们为助手产品命名
HTML
{{products paramA}}
JS
products: function(userId){
findOne({userId:userId})
}
2)完美,但如何通过_id
:
当您使用each
呼叫用户帮助时,您可以{{_id}}
访问,因此应该可以通过它。
如果这种方式不起作用。再次尝试使用each
。尝试通过this._id
到达产品助手中的元素。
我希望这两种方法足以解决你的问题。