使用每个块显示来自两个 collections 的数据

Displaying data from two collections using each block

所以我有2个collection如下 Collection 用户,文档可能如下所示

{_"id":"xyz",
"name":"sam"
}

Collection 项,多于一个文档链接到用户 collection 如下

{_"id":"123345",
   "userid":"xyz"
    "item":"potato"
}
{_"id":"3456",
   "userid":"xyz"
    "item":"tomato"
}

现在假设我正在 运行 查询以显示名称为 sam 的所有文档,如下所示,(将 运行 作为助手)

return User.find({name:"sam"});

然后我将记录传递到 blaze 模板并使用 {{#each}} 显示值。

现在,我还想显示来自 collection "items" 和 collection "users" 的数据。所以我在 html 使用 {{#each}} 后的数据可能看起来像这样

<li> sam ...potato, tomato </li>
<li> sam ...potato, tomato, orange </li> 
<li> sam ...pineapple </li>  
<li> sam ... </li> 

即数据显示在模板上使用#each 但来自 2 个不同的 collections。

谁能告诉我模板中的代码应该是什么样子的?

您可以在发布用户信息时使用 publish-composite package。 (参见 link 中的示例 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,
                   ...
               }
            });
      }}]

});

这里的解决方法是传递一个参数给helper。在这里它应该发生一点点棘手:

1)知道如何传递参数:

让我们为辅助产品命名

HTML

{{products paramA}}

JS

products: function(userId){
findOne({userId:userId})
}

2)完美,但是如何通过_id:

当您使用 each 调用用户助手时,您可以通过 {{_id}} 访问,因此应该可以传递它。 如果这不知何故不起作用。再次尝试使用 each。尝试通过 this._id.

访问产品助手中的元素

希望以上两种方式能够解决你的问题