Как отображать данные профиля Meteor.user() в представлении

Я предполагаю, что это должна быть элементарная проблема, однако я слишком долго боролся с этим. Я относительно новичок в Meteor.

Я просмотрел документацию для Meteor.user() (http://docs.meteor.com/#meteor_users) и вижу, как добавляется дополнительная информация в файл user.profile. То есть.

//JS file
Meteor.users.insert({
    username: 'admin',
    profile: {
                first_name: 'Clark',
                last_name: 'Kent'
    },

});

Как мне отобразить информацию о профиле в шаблоне просмотра? Я могу получить доступ к объекту пользователя через представление и веб-консоль (Meteor.user()), но я не могу получить доступ к данным объекта.

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

// HTML view
{{Meteor.user().username}}
{{Meteor.user().profile.first_name}}
{{Meteor.user().profile.last_name}}

Любая помощь очень ценится.

Ответы

Ответ 1

Ваша вставка верна.

Но для отображения информации, подобной первому имени, вы должны предоставить вспомогательную функцию.

Ваш html-шаблон:

<template name="user">
  <p>{{firstName}}</p>
</template>

Ваш js-код:

Template.user.helpers({
  firstName: function() {
    return Meteor.user().profile.first_name;
  }
});

Вы можете дополнительно обернуть шаблон пользователя с помощью помощника {{currentUser}}, чтобы убедиться, что есть пользователь.

{{#if currentUser}} 
  {{> user}}
{{/if}}

Ответ 2

Если вы не хотите определять помощник прокси для разных атрибутов объектов, вложенных в {{currentUser}}, вы можете сделать следующее в своем шаблоне:

{{#with currentUser}}
    {{#with profile}}
        {{first_name}}
    {{/with}}
{{/with}}

Обновлено, чтобы отражать предложение комментариев.

Ответ 3

В ваших шаблонах вы захотите использовать {{currentUser}} вместо {{Meteor.user()}}.

Docs

Ответ 4

попробуйте этот путь

{{#with userDetails}}
   First name:-{{this.first_name}}
   Last name:- {{this.last_name}}
{{/with}}

 //jsSide
 userDetails(){
   return Meteor.user();
 }