这是html:
<div>
<span id="login-entrance">{{loginEntranceContent}}</span>
</div>
这是客户端 js 代码:
loginEntranceContent(){
if (Meteor.userId()==null) {
return 'Log in/Sign up';
} else {
Meteor.user().emails.address;
};
},
现在我确定用户已登录,因为当我尝试 Meteor.userId() 时,它返回当前用户_id的值。但是 Meteor.user() 原来是未定义的。我假设 Meteor.user() 结果应该稍后自动更新。所以我等了一段时间,但它在我的 chrome 浏览器中也没有更新。
我知道这个问题与 DOM 在数据准备就绪之前渲染的事实有关。但我不知道那里到底发生了什么。
我已经在论坛上寻找答案,有一些类似的主题,但没有一个提供明确的解释和简单的解决方案。所以我希望为它打开一个新话题是值得的。
仅供参考,为了解决它,我尝试在服务器端制作一种方法:
Meteor.users.findOne({_id:'this.userId'});
并从客户端调用它。 它仍然得到未定义的结果....
你只是在做一个null
检查,那么其他"虚假"值检查呢,你必须正确使用下面的代码,
loginEntranceContent(){
if (!Meteor.userId()) {
return 'Log in/Sign up';
} else if(Meteor.user() && Meteor.user().emails && Meteor.user().emails[0].address){
return Meteor.user().emails[0].address;
} else {
//do something here.
};
},
由于您尚未向我们展示从客户端调用 Meteor 方法的代码,@Jankapunkt建议在服务器端使用以下代码,
Meteor.users.findOne({_id : this.userId});
注意:Meteor提供了一个漂亮的API来管理用户帐户