【问题标题】:Access meteor.user subscription in template helpers using flow router使用流路由器在模板助手中访问meteor.user订阅
【发布时间】:2016-09-20 12:14:10
【问题描述】:

在我的带有 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;
  }
})

还应注意,辅助函数为 Meteor.user() 以外的用户返回 undefined ,我也尝试过 How to access FlowRouter subscriptions in Meteor template helpers? ,但结果相同

【问题讨论】:

    标签: meteor meteor-blaze flow-router


    【解决方案1】:

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

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

    您正在搜索仅包含您发布的一个用户的集合。

    要解决此问题,您需要:

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

    • 与用户订阅发布,每次需要查找时都要查找(运行订阅,然后findOne() -> 效率低)

    • 使用可以返回您需要的用户而不暴露所有人的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 2016-05-04
      • 2016-03-01
      • 2023-03-31
      • 1970-01-01
      • 2016-02-14
      • 2014-01-13
      相关资源
      最近更新 更多