使用流路由器

时间:2016-05-23 14:40:27

标签: meteor meteor-blaze flow-router

在我使用Flow路由器的meteor应用程序中,我使用meteor订阅来获取用户数据,但是帮助程序中的数据不会根据用户集合更新进行更新。

在我的出版物代码中,

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()以外的用户,helper函数返回undefined,我也尝试了How to access FlowRouter subscriptions in Meteor template helpers?,但结果是相同的

1 个答案:

答案 0 :(得分:0)

您的出版物返回1个用户:用户名作为参数传递的用户,因此在客户端上,当您订阅此出版物时,您将获得一个用户。 当你这样做

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

您正在搜索只有您发布的用户的集合。

要解决此问题,您需要:

  • 将所有用户发布到客户端(出于安全原因不理想,除非您妥善过滤掉允许登录用户查看的用户)

  • 订阅该出版物,用户每次需要查找时都要查找(运行subscribe,然后findOne() - >效率低下)

  • 使用一种方法,在不暴露所有人的情况下返回您需要的用户。