在使用流路由器的模板帮助程序中访问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() - >低效)
或
- 使用方法,将返回你需要不暴露所有人用户。