我真的在与铁路由器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');
}
}
});
答案 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
为您的每条路线。