使用流路由器在模板助手中访问 meteor.user 订阅
Access meteor.user subscription in template helpers using flow router
在我的带有 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;
}
})
还应注意辅助函数 returns 未为 Meteor.user() 以外的用户定义,我也尝试过 ,但结果相同
您的发布 returns 1 个用户:用户名作为参数传递的用户,因此在客户端上,当您订阅此发布时,您将获得一个用户。
当你做
Meteor.users.find({....});
您正在搜索只有您发布的一个用户的集合。
要解决此问题,您需要:
- 将所有用户发布到客户端(出于安全原因并不理想,除非您妥善过滤掉允许登录用户查看的用户)
或
- subscribe to the publication with the user to look every time you need to do a lookup (运行 the subscribe, then findOne() -> 效率低下)
或
- 使用一种方法,该方法将 return 您需要的用户而不暴露给所有人。
在我的带有 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;
}
})
还应注意辅助函数 returns 未为 Meteor.user() 以外的用户定义,我也尝试过
您的发布 returns 1 个用户:用户名作为参数传递的用户,因此在客户端上,当您订阅此发布时,您将获得一个用户。 当你做
Meteor.users.find({....});
您正在搜索只有您发布的一个用户的集合。
要解决此问题,您需要:
- 将所有用户发布到客户端(出于安全原因并不理想,除非您妥善过滤掉允许登录用户查看的用户)
或
- subscribe to the publication with the user to look every time you need to do a lookup (运行 the subscribe, then findOne() -> 效率低下)
或
- 使用一种方法,该方法将 return 您需要的用户而不暴露给所有人。