在使用流路由器的模板帮助程序中访问meteor.user订阅

问题描述:

在我的带有Flow路由器的流星应用程序中,我使用流星订阅来获取用户数据,但帮助程序中的数据未根据用户集合更新进行更新。在使用流路由器的模板帮助程序中访问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; 
    } 
}) 

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

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

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

你通过一个集合,只有您发布一个用户搜索。

要解决这个问题,你需要:

  • 向所有用户发布到客户端(不理想出于安全原因,除非你采取了登录的用户被允许看到很好的照顾过滤掉用户)

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

  • 使用方法,将返回你需要不暴露所有人用户。