流星的反应性重新渲染一切

时间:2013-12-07 14:00:45

标签: meteor rendering

我正在研究Meteor app。我在主模板中有这个:

{{# if currentUser}}
    {{> app}}
{{else}}
    {{> login }}
{{/if}}

这显示用户未登录时的登录页面,否则显示应用程序页面。

然后在我的代码中,我只是更新当前用户:

Meteor.users.update(Meteor.userId(), {$set: {event_id: 1}});

问题在于,由于当前用户已更改,因此会导致重新呈现所有内容。这本身就是一个大问题。但更糟糕的是,我使用的是Bootstrap模式,不能重新渲染(bootstrap保持对dom元素的javascript引用)

如果(currentUser == null)改变了它的值,我怎样才能让应用程序重新渲染?

3 个答案:

答案 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在触发失效方面的好处之一。