Meteorjs - обычный способ перебора пользовательских данных - PullRequest
0 голосов
/ 14 января 2019

Я занимаюсь разработкой системы с использованием MeteorJ, и мне нужно получить все электронные письма и профиль пользователя, зарегистрированного в моем MongoDB. Это мой publish.js

if (Meteor.isServer) {
    Meteor.publish('Userlist', function() {
       return Meteor.users.find({}, {fields: {emails: 1, profile: 1}});
    });
}

и здесь я подписываю свои пользовательские данные на уровне шаблона res_user.js

Template.reg_user.onCreated(function() {
    this.subscribe('Userlist');
});

Template.reg_user.helpers({
    userku: function() {
       let user = Meteor.users.find();
       return user;   
    },   
});

это мой HTML

 {{#each userku}}
       <ul>
           <li>{{emails.address}} </li>
           <li>{{profile.name}} </li>
       </li>
 {{/each}}

и когда я пытаюсь повторить его в своем html, он не показывает никаких электронных писем, только имя профиля, после просмотра этого урока Я обнаружил, что нужны некоторые пользовательские помощники для получения электронной почты, поэтому я должен добавить нового помощника

Template.reg_user.helpers({
   // same code here
   getEmail: function(){
        return this.emails[0].address;
   }
});

и назовите этот помощник в моем HTML вместо обычного

{{#each userku}}
   <ul>
       <li>{{getEmail}} </li>
       <li>{{profile.name}} </li>
   </li>
{{/each}}

Почему я не могу использовать обычный способ получения данных email.address? Когда я вижу структуру Mongo, то же самое и с profile.address. И может кто-нибудь объяснить, почему и когда мне следует использовать такие собственные помощники, потому что это выдает мне ошибку, когда я пытаюсь что-то реализовать, но не знаю причину.

1 Ответ

0 голосов
/ 14 января 2019

Структура электронных писем в документе пользователя Метеора

Структура электронных писем пользователя представляет собой массив, главным образом потому, что вы можете иметь более одного адреса электронной почты , связанного с вашей учетной записью:

{
  ...
  emails: [
    {
      address: 'someone@provider.com'
      verified: false // or true
    }
  ]
  ...
}

Отображение электронных писем без помощников

Чтобы успешно отображать электронные письма без дополнительного помощника, вам необходимо перебрать их все:

{{#each userku}}
   <ul>
       {{#each emails}}
       <li>{{this.address {{#if this.verified}}(verified){{/if}}</li>
       {{/each}}
       <li>{{profile.name}} </li>
   </li>
{{/each}}

который, конечно, будет отображать все электронные письма, если у пользователя более одного электронного письма.

Показывать только первое электронное письмо

Чтобы всегда отображать только первое электронное письмо, вам нужен другой помощник:

Template.reg_user.helpers({
  firstMail (emails){
    return emails[0];
  }
});

и назовите это так:

{{#each userku}}
   <ul>
       {{#with firstMail emails}}
       <li>{{this.address {{#if this.verified}}(verified){{/if}}</li>
       {{/with}}
       <li>{{profile.name}} </li>
   </li>
{{/each}}

Дополнительные показания

Обратите внимание, что я также использовал поле verified в своих примерах, подробнее об этом читайте здесь:

https://docs.meteor.com/api/passwords.html#Accounts-verifyEmail

Общее прочтение по этой теме здесь:

https://docs.meteor.com/api/accounts.html

...