我仍然在努力了解如何从另一个集合查询中将Meteor.users作为外键访问。据我所知,默认情况下只发布当前用户,因此我在服务器上有一个发布
Meteor.publish('itemOwner', function(userId) {
check(userId, String);
var user = Meteor.users.find({id: userId});
return user;
// return Meteor.users.find({id: userId}, {
// fields: {'profile': 1} });
});
然后我在客户端上有一个Deps.autorun ..
Deps.autorun(function () {
var itemOwnerId = Session.get("itemOwnerID");
if (itemOwnerId) {
debugger
var ID = Session.get("itemOwnerID");
Meteor.subscribe('itemOwner', Session.get("itemOwnerID"));
}
});
我在模态表单加载上设置会话ID,并通过调用ownerProfile帮助程序(或尝试)将其显示在模板中
Template.showQuoteModalInner.helpers({
getQuote: function () {
// Get the quote ID from the session var
var quote = Session.get("quoteID");
if(quote) {
debugger;
var ID = quote.user._id;
Session.set("itemOwnerID", quote.user._id);
return quote;
}
},
ownerProfile: function() {
debugger;
var quote = Session.get("quoteID");
if(quote) {
var ID = quote.user._id;
var theUser = Meteor.users.find({_id: quote.user._id});
return theUser;
};
}
});
现在,我可以在每个阶段跟踪用户ID,并看到它正确传递给自动运行和帮助程序。如果我在ownerProfile助手中的调试器中停止程序,并在控制台中放入Meteor.user.fetch({_ id:" id here"})。fetch()我得到了正确的用户。但是,在处理程序本身中,Meteor.users.find返回null ???我错过了什么?
答案 0 :(得分:2)
我发现了两种可能性。
首先,您在发布功能的查找中缺少下划线。
.find({id: userId})
应为.find({_id: userId})
。
但如果你在控制台中看到用户(登录用户除外),这可能不是问题。
其次,如果您没有从Template.showQuoteModalInner.ownerProfile
助手中看到用户,可能是因为您要返回find()而不是findOne()。
find()返回一个游标,而findOne()返回记录。如果要显示单个用户的属性,请尝试使用findOne()。