Метеор: доступ к имени пользователя и profile_picture из коллекции пользователей по идентификатору

У меня есть 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», «имя» и «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. Я не хочу хранить изображение и имя пользователя в коллекции тем. Просто хочу получить к ним доступ из коллекции пользователя, когда это необходимо.


person Karan Sarin    schedule 28.03.2016    source источник


Ответы (2)


Возможно, самый простой способ добиться того, что вам нужно, — это использовать имя как часть схемы, которая сохраняется в темах при их создании. Затем вы можете просто вызвать {{name}} в своем шаблоне. Для изображения вашего профиля вы хотели бы создать пользовательскую переменную в шаблоне. Что-то вроде {{getProfileImage userId}}. Затем напишите помощник шаблона в файле, таком как common.js, чтобы получить изображение профиля на основе идентификатора пользователя.

person Michael Williams    schedule 28.03.2016
comment
URL-адрес изображения находится в коллекции пользователей. Не могли бы вы помочь мне с тем, как именно я могу получить URL-адрес, используя только _id. Какой код написать? Спасибо. - person Karan Sarin; 28.03.2016

Вы можете реализовать вспомогательную функцию, которая возвращает документ пользователя, создавшего тему. После этого вы можете использовать выражение #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.

person Matthias A. Eckhart    schedule 28.03.2016