努力等待订阅和多个订阅

时间:2014-06-01 06:39:47

标签: meteor iron-router

我真的在与铁路由器waitOn挣扎。

我有很多订阅,我想等待,在我看来铁路由器正在等待任何事情。

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

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

我已经尝试了几乎所有可能的配置,但我似乎无法获得&#34; loader&#34;展示自己并等待所有订阅准备就绪。我在layoutTemplate(&#39; layout&#39;)中有一个帮助函数从数据库中获取一个值但是findOne()返回undefined / null我认为这是因为路由器没有等待订阅... < / p>

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

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');
        }
    }
});

2 个答案:

答案 0 :(得分:9)

尝试像这样更改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');
        }
    }
});

答案 1 :(得分:1)

尝试将您的订阅从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为您的每条路线。