2016-02-09 3 views
1

Я пытаюсь опубликовать профиль пользователя. У меня есть следующие функции публикации в publish.js:Meteor publish - подписаться на профиль

Meteor.publish("singleProfile", function (profileId) { 
    check(profileId, String); 
    return Meteor.users.find(profileId, { fields: { _id: 1, services: 1, profile: 1 }}); 
}); 

Это мой путь в router.js:

Router.route('/profile/:_id', { 
    name:   'profilePage', 
    template:  'appProfile', 
    onBeforeAction: function() { 
     var currentUser = Meteor.userId(); 
     if(currentUser) { 
     this.next(); 
     } else { 
     this.render("signin"); 
     } 
    }, 
    waitOn: function() { 
     this.response = Meteor.subscribe('singleProfile', this.params._id); 
     return this.response; 
    }, 
    action: function() { 
     this.render('appProfile'); 
    } 
    }); 

Вопрос в том, как получить доступ к детали профиля в шаблоне appProfile? Нужен ли мне помощник шаблона? Или мне нужно изменить этот код?

+0

Хорошо, это выглядит как что помощник все еще требуется, и я должен работать найти на MiniCollection, где произошло публикация! – L4zl0w

ответ

1

Вы можете использовать вспомогательный шаблон для этого:

Template.appProfile.helpers({ 
    users() { 
     return Meteor.users.find(); 
    } 
}); 

Затем в шаблоне:

... 
{{#each users}} 
    {{profile.myProperty}} <!-- Renders the myProperty field of the profile. --> 
{{/each}} 
+0

Правильно, я в конце концов понял это. Моя путаница заключалась в том, почему мне нужно снова выполнять Meteor.users.find() в помощнике? После прочтения документации о подписке я понял, что подписки хранятся в коллекциях MiniMongo в браузере и что Meteor.users.find() в помощнике ищет эту коллекцию MiniMongo, а не бэкэнд. – L4zl0w