我正在研究Meteor app。我在主模板中有这个:
{{# if currentUser}}
{{> app}}
{{else}}
{{> login }}
{{/if}}
这显示用户未登录时的登录页面,否则显示应用程序页面。
然后在我的代码中,我只是更新当前用户:
Meteor.users.update(Meteor.userId(), {$set: {event_id: 1}});
问题在于,由于当前用户已更改,因此会导致重新呈现所有内容。这本身就是一个大问题。但更糟糕的是,我使用的是Bootstrap模式,不能重新渲染(bootstrap保持对dom元素的javascript引用)
如果(currentUser == null)改变了它的值,我怎样才能让应用程序重新渲染?
答案 0 :(得分:2)
如何从Meteor.userId()
获取变量?
Template.yourTemplate.isLoggedIn = function(){
return !!Meteor.userId();
}
您的模板现在应该是这样的:
{{#if isLoggedIn}}
{{> app}}
{{else}}
{{> login }}
{{/if}}
答案 1 :(得分:2)
您可以使用单独的集合来跟踪用户信息,因此您永远不会查询用户集合本身。每当它落地时,都应该使用Meteor UI修复此问题。您可以通过使用meteor --release template-engine-preview-5.5
运行Meteor来试用它。
答案 2 :(得分:1)
Template.main.userLoggedIn = function () {
return ! Session.equals(Meteor.user(), null);
};
这举例说明了Session.equals相对于Session.get在触发失效方面的好处之一。