我想检测登录用户是否在集合中没有记录,然后使用一些默认值启动它们。所以我在isClient部分的开头使用它;
if (Meteor.isClient) {
if(Meteor.user()){
Meteor.subscribe('collection');
var currentUserId = Meteor.userId();
if (collection.find({"userID": currentUserId}).count() == 0)
{
Meteor.call('initUser', currentUserId);
}
} else {
console.log("You are not logged in");
}
}
问题是它从来没有看到我登录。我是否需要从模板或其他东西中调用它?在我做的教程中,他们只是自己拥有它。
答案 0 :(得分:1)
你的代码看起来不错,但它并不存在于被动计算中,这意味着它只会在代码开头运行一次,而不会再像常规顺序编程一样运行。
您需要使用Tracker.autorun
这样的代码包围您的代码:
if (Meteor.isClient) {
Tracker.autorun(function(){
// Meteor.userId() is a reactive data source that will trigger invalidation
// of the reactive computation whenever it is modified (on login/logout)
var currentUserId = Meteor.userId();
if(currentUserId){
Meteor.subscribe('collection',function(){
if (collection.find({
userID: currentUserId
}).count() === 0){
Meteor.call('initUser', currentUserId);
}
});
} else {
console.log("You are not logged in");
}
}
}
我已将其重构为仅使用Meteor.userId()
,因为您在此段代码中未使用currentUser
属性。