【问题标题】:Displaying data from two collections using each block使用每个块显示来自两个集合的数据
【发布时间】:2016-03-16 02:59:20
【问题描述】:

所以我有 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}} 显示值。

现在,另外我还想显示来自集合“项目”的数据以及集合“用户”。所以我使用 {{#each}} 后的 html 数据可能看起来像这样

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

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

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

【问题讨论】:

    标签: meteor meteor-blaze


    【解决方案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,
                       ...
                   }
                });
          }}]
    

    });

    【讨论】:

    • 我使用了你提到的那个包,它就像一个魅力。在客户端,我使用了 this._id,如下面的评论中所述。
    【解决方案2】:

    这里的解决方案是将参数传递给助手。这里应该会发生一些棘手的事情:

    1)知道如何传递参数:

    让我们为辅助产品命名

    HTML

    {{products paramA}}
    

    JS

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 2012-08-24
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 2020-02-13
      相关资源
      最近更新 更多