【问题标题】:struggling to wait on subscriptions and multiple subscriptions努力等待订阅和多个订阅
【发布时间】:2014-06-01 06:39:46
【问题描述】:

我真的在为 Iron-router waitOn 苦苦挣扎。

我有一些订阅,我想等待,在我看来,铁路由器正在等待任何东西。

我已经设置了一些订阅 (main.js),我想在应用程序启动之前加载它们:

Meteor.subscribe("appointments");
Meteor.subscribe("business");
Meteor.subscribe("clients");
Meteor.subscribe("staff"); 

我已经尝试了几乎所有可能的配置,但我似乎无法让“加载程序”显示自己并等到所有订阅都准备好。我在 layoutTemplate ('layout') 中有一个辅助函数来从数据库中获取一个值,但是 findOne() 返回 undefined/null 我认为这是因为路由器没有等待订阅...

我的路由器配置。我想了解如何链接依赖项或创建要等待的依赖项。

Router.configure({
    layoutTemplate: 'layout',

    loadingTemplate: 'loading',
    waitOn: function () {
        console.log('Iron router start');
        this.subscribe('clients').wait();
        this.subscribe('staff').wait();
        this.subscribe('appointments').wait();
        this.subscribe('business').wait();
        this.subscribe('calendar').wait();


    },
    action: function() {
        if (this.ready()) {
            this.render('dashboard');
        } else {
            this.render('loading');
        }
    }
});

【问题讨论】:

    标签: meteor iron-router


    【解决方案1】:

    尝试像这样更改waitOn 部分。另外,我认为您可以从main.js 文件中删除订阅,并在路由器的waitOn 函数中为该特定路由编写所需/依赖的订阅。

    Router.configure({
        layoutTemplate: 'layout',
        loadingTemplate: 'loading',
        waitOn: function () {
            console.log('Iron router start');
            return [        
                Meteor.subscribe('clients'),
                Meteor.subscribe('staff'),
                Meteor.subscribe('appointments'),
                Meteor.subscribe('business'),
                Meteor.subscribe('calendar')
            ]
    
        },
        action: function() {
            if (this.ready()) {
                this.render('dashboard');
            } else {
                this.render('loading');
            }
        }
    });
    

    【讨论】:

    • 诀窍是使用数组 [订阅]。我一直在努力让它直接从整体路由器选项 [Router.configure()] 中工作,但设法让它直接从 this.route('myRoute', { options...
    【解决方案2】:

    尝试将您的订阅从 onWait 转移到 onBeforeAction:

    这可能有效,但我不确定。通常您将每个路由的等待参数定义为不是全局的。

    Router.configure({
        layoutTemplate: 'layout',
        loadingTemplate: 'loading',
        onBeforeAction: function () {
            console.log('Iron router start');
            this.subscribe('clients').wait();
            this.subscribe('staff').wait();
            this.subscribe('appointments').wait();
            this.subscribe('business').wait();
            this.subscribe('calendar').wait();
    
    
        }
    });
    
    Router.onBeforeAction('loading');
    

    如果这给您带来麻烦,请尝试为您的每条路线使用上面的onBeforeAction

    【讨论】:

    • 您关于在路由级别使用等待创建定义的评论非常有用。作为一个全球性的人,我没有成功——也许我做错了什么。
    猜你喜欢
    • 2021-05-06
    • 1970-01-01
    • 2020-12-02
    • 2021-06-08
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多