【问题标题】:Wait for Meteor.user() to completely load before template renders在模板渲染之前等待 Meteor.user() 完全加载
【发布时间】:2017-02-25 23:09:37
【问题描述】:

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

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

【问题讨论】:

    标签: meteor meteor-blaze


    【解决方案1】:

    meteor 嵌入的“currentUser”助手可以让你知道用户集合何时准备好:

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

    【讨论】:

    • Isn't {{ #if currentUser.emails.[0].verified }}{{#if currentUser}} exepet 一样,我要求它等待特定的字段。
    • 不一样。 currentUser 可以返回 true 并且 currentUser.emails.[0].verified 仍然是 false。您应该在 {{#if currentUser}} 中添加 {{#if currentUser.emails.[0].verified}}
    • 好的,这行得通。这么简单的解决方案。谢谢。我应该把它包装在{{#if Template.subscriptionsReady}}
    • 您应该使用{{if Template.subsciptionReady}} 来检查其他收藏的可用性,但是对于users 收藏不是必需的,因为currentUser 完成这项工作(除非您允许未登录的用户浏览您的应用程序并到达您正在验证电子邮件的模板)。
    【解决方案2】:

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

    示例。

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

    【讨论】:

    • 是的,我已经尝试过了,但是,即使尚未完全接收/加载所有用户的数据,订阅也被认为已准备就绪。这会导致应用程序在数据逐渐加载时在屏幕之间翻转。这只是一瞬间,但对用户体验来说太糟糕了。
    【解决方案3】:

    我发现对我有用的是在 Iron 路由器的 waitOn 函数中订阅等待中的用户:

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

    【讨论】:

    • 是铁路由器吗?在使用 flowrouter
    • 使用铁路由器
    猜你喜欢
    • 2014-11-15
    • 1970-01-01
    • 2016-04-16
    • 2016-04-30
    • 2016-10-25
    • 2017-11-16
    • 2011-06-10
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多