Доступ к подписке meteor.user в помощниках по шаблону с помощью маршрутизатора потока

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

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

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;
  }
})

Также следует отметить, что вспомогательная функция возвращает undefined для пользователей, отличных от Meteor.user(), и я также пробовал Как получить доступ к подпискам FlowRouter в помощниках шаблонов Meteor? , но результат тот же


person Pooja Jayaraj    schedule 23.05.2016    source источник


Ответы (1)


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

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

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

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

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

or

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

or

  • используйте метод, который вернет нужного вам пользователя, не раскрывая всех.
person MrE    schedule 24.05.2016