使用每个块

时间:2016-03-16 02:59:21

标签: meteor meteor-blaze

所以我有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个不同的集合中显示数据。

有人能告诉我模板中的代码应该是什么样的吗?

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到达产品助手中的元素。

我希望这两种方法足以解决你的问题。