2016-05-23 1 views
1

В моем приложении meteor с потоковым маршрутизатором я использую подписку meteor для извлечения пользовательских данных, но данные в хелперах не обновляются в соответствии с обновлениями пользовательской коллекции.Доступ к подписке на meteor.user в помощниках шаблонов с использованием потокового маршрутизатора

В моей публикации кода,

Meteor.publish('fetchUserData', function(usrnm) { 
return Meteor.users.find({'username':usrnm}, { 
fields: { 
    profile: true, 
    services: true, 
    emails: true, 
    votedPatents: true, 
    userType: true, 
    followingUsers: true, 
    followedByUsers: true 
    } 
}); 
}); 

В моем файле router.js,

Subs = new SubsManager(); 
FlowRouter.route('/:username', { 
subscriptions: function(params) { 
    this.register('fetchUserData', Meteor.subscribe('fetchUserData', params.username)); 
}, 
action: function(params) { 
    BlazeLayout.render('main', {center: 'profile'}); 
    })  
} 
}); 

В моем коде клиента

Template.profile.onCreated(function() { 
    this.autorun(function() { 
    var handle = Subs.subscribe('fetchUserData', username); 
    }) 
}) 


Template.profile.helpers({ 
    connections: function(){ 
    var u = Meteor.users.findOne({'username':username}); 
    return u; 
    } 
}) 

Также следует отметить, что вспомогательная функция возвращает неопределенное значение для пользователей, отличных от Meteor.user(), и я также попробовал How to access FlowRouter subscriptions in Meteor template helpers?, но результат это то же самое

ответ

0

Ваша публикация возвращает 1 пользователь: пользователь с именем пользователя передается как параметр, поэтому на клиенте, когда вы подписываетесь на эту публикацию, вы получаете одного пользователя. Когда вы

Meteor.users.find({....});

вы ищете через коллекцию, которая имеет только один пользователь, который был опубликован.

Чтобы это исправить, вам нужно:

  • опубликовать все пользователь к клиенту (не подходит по соображениям безопасности, если вы не заботиться о фильтрации пользователей, что подписанные в пользователе разрешено видеть)

или

  • подписаться на публикацию с пользователем, чтобы посмотреть на каждый раз, когда необходимо выполнить поиск (запустить подписку, то findOne() -> неэффективный)

или

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