我正在尝试通过集合帮助程序包获取一些非登录用户的信息,我显然在这里缺少一些基本的东西,因为我无处可去。
我有一个关系设置什么是愉快地返回文档所有者的profile.name元素,只要这恰好与登录用户一致,但是,我没有得到任何回复的非登录在用户中(因为客户端的安全性)。
我在客户端和服务器上添加了一个新的出版物
// User Profile
Meteor.publish("userProfile", function() {
return Meteor.users.find({_id: this.userId},
{fields: {'profile': 1}});
});
并在与我试图在
中显示的页面关联的js中订阅了此出版物// Don't need this to be reactive, so
Meteor.subscribe("userProfile");
但仍无法使用
访问文档中的个人资料数据<h4>Posted by: {{projOwner.profile.name}}</h4>
projOwner看起来像
projectDocs.helpers({
projOwner: function() {
console.log(this.owner._id);
var owner = Meteor.users.findOne(this.owner._id);
//console.log("Owner is: " +owner);
return owner;
}
});
我做错了什么?
答案 0 :(得分:1)
在发布功能中,this.userId
始终是当前登录用户的ID。当前用户的个人资料会自动发布,因此该功能不会做任何有用的事情。
这里的真正问题是您需要将正确的用户子集发布到客户端。也许这是您正在查看的文档的项目所有者,也许它是组中的所有用户,等等。如果不了解您的问题,很难说。
一个简单的开始就是发布所有用户以确保您的代码正常工作,然后尝试减少该设置。请记住,发布函数可以接受参数,因此您可以传入,例如,项目的ID,然后像这样发布所有者:
Meteor.publish('projectOwner', function(projectId) {
check(projectId, String);
var project = Projects.findOne(projectId);
return Meteor.users.find(project.owner, {
fields: {'profile': 1}
});
});