Meteor:通过id从用户集合中访问用户的名称和profile_picture

时间:2016-03-28 00:05:45

标签: mongodb meteor meteor-blaze meteor-accounts meteor-helper

我的项目中有2个馆藏:用户&主题

在主题收藏中,我有一个' createdBy'存储' _id'的字段用户。

*Sample object*

{
  "_id": "SNj6C5fqMntSCaXdL",
  "opic": "Best Gaming Laptop",
  "tags": [
    "games",
    "technology",
    "product"
  ],
  "createdBy": "uzsMa4fZgmrrAD9ea",
  "createdAt": "2016-03-06T21:25:38.672Z"
}

在用户集合中,我有字段' _id',' name'和' profile_picture_url'为每个用户。

{
  "_id": "uzsMa4fZgmrrAD9ea",
  "createdAt": "2016-03-03T03:48:05.787Z",
  "name": "Karan Sarin",
  "profile_picture_url": "https://pbs.twimg.com/pro2_normal.jpg"
}

我正在迭代主题并显示所有主题的列表,并希望显示个人资料图片和创建者的名称。

{{#each topics}}
  <h2>{{topic_title}}<h2>
  *Profile picture here* *User's name here*
{{/each}}

P.S。我不想将用户的图片和名称存储在主题集合中。只是想在需要时从用户的集合中访问它们。

2 个答案:

答案 0 :(得分:0)

完成所需内容的最简单方法可能是将名称作为模式的一部分,在创建主题时将其存储到主题中。然后,您只需在模板中调用{{name}}即可。对于您的个人资料图片,您需要在模板中创建自定义变量。像{{getProfileImage userId}}之类的东西。然后在common.js这样的文件中编写模板助手,根据userId拉出配置文件图像。

答案 1 :(得分:0)

您可以实现一个辅助函数,该函数返回创建该主题的用户的文档。之后,您可以使用#with表达式将数据上下文设置为与当前主题对应的用户文档。

例如:

Template.topicsList.helpers({
    user: function () {
        return Users.findOne({_id: this.createdBy});
    }
});
<template name="topicsList">
    {{#each topics}}
        <h2>{{topic_title}}<h2>
            {{#with user}}
                <img src="{{profile_picture_url}}" alt="{{username}}">
                <strong>{{name}}</strong>
            {{/with}}
    {{/each}}
</template>

请注意您还订阅了Users集合中的所需文件。