2017-02-24 140 views
0

然而,之前已经提出过这个问题,我不觉得我见过合适的答案。我目前在布局模板上使用{{ #if currentUser.emails.[0].verified }} show data {{else}} please verify email {{/if}},检查用户是否验证了他们的电子邮件。在这种情况下,如果用户已注册因为meteor.user()尚未完全加载,屏幕之间会出现闪烁,所以currentUser.emails.[0].verified返回null,并在完全加载后更改为true。在模板渲染之前等待Meteor.user()完全加载

有没有一种方法,我可以等待Meteor.userId在模板呈现之前完全加载而不使用延迟?

回答

2

流星嵌入“当前用户”助手可以让你知道当用户采集准备:

{{#if currentUser}} // Do my stuff {{else}} Checking... // You can also show a spinner image or GIF here
{{/if}}

+0

不是'{{#if currentUser.emails。[0] .verified}}'与'{{#if currentUser}}'exepet相同我要求它等待特定字段。 – bp123

+0

是不一样的。 currentUser可以返回true和currentUser.emails。[0] .verified仍然是false。你应该在{{#if currentUser}}里面添加{{#if currentUser.emails。[0] .verified}} – Ruben

+0

好的,那是有效的。这种简单的解决方案。谢谢。我应该在'{{#if Template.subscriptionsReady}}中包装它'' – bp123

0

通常,您可以在模板中使用Template.subscriptionsReady来打包取决于订阅数据的代码。由于Meteor自动处理currentUser的发布/订阅,我不确定这种方法是否可行。试试看,让我知道。

例子。

{{#if Template.subscriptionsReady}} 
    {{ #if currentUser.emails.[0].verified }} show data {{else}} please verify email {{/if}} 
{{/if}} 
+0

是的,我已经试过这一点,即使所有用户的数据还没有完全然而,订阅考虑准备接收d /加载。随着数据逐渐加载,这会导致应用在屏幕之间翻转。这只是一瞬间,但对用户体验来说很糟糕。 – bp123

0

我已经找到好工作对我来说是订阅用户等待在waitOn功能在铁路由器:

Router.route('/',{ 
     waitOn: [ 
      function() { 
       if (!Meteor.userId()) { 
        Router.go("/login"); 
       } 
       return Meteor.subscribe('currUser'); 
      }, 

     ], 
     ... 
}) 
+0

是铁路路由器吗?在使用flowrouter – bp123

+0

使用铁路由器 – mutdmour

相关问题