Попробуйте использовать вместо этого шаблон subscriptions
.
this.route('gamePage', {
path: '/game/:slug/',
subscriptions: function() {
return Meteor.subscribe('singlePlayer', this.params.slug);
},
onBeforeAction: function() {
var singlePlayer = this.data();
if (singlePlayer) {
if (singlePlayer.upgrade) {
this.subscribe('upgrades', this.params.slug);
}
}
this.next();
},
data: function() {
return Games.findOne({slug: this.params.slug});
},
waitOn: function() { return [Meteor.subscribe('singleGame', this.params.slug)]}
});
Тем не менее, важно, чтобы вы также включить loading
плагин, чтобы воспользоваться в loadingTemplate
.
Router.configure({
loadingTemplate: 'loading' // general purpose loading template
});
// built in plugin.. surprisingly not clearly specified in current docs, but you can dive in the code for plugins.
// https://github.com/EventedMind/iron-router/blob/devel/lib/plugins.js
Router.onBeforeAction('loading', { only: ['gamePage'] }); // only show loading for pages with subscriptions
Router.map(function() {
this.route('gamePage',{
//... your other options here ..
loadingTemplate: 'gamePageLoading', // game Page dedicated loading markup.
});
});
Там также this.ready()
шаблон, если вы хотите, чтобы остаться на вашем onBeforeAction
реализации.
this.route('gamePage', {
path: '/game/:slug/',
onBeforeAction: [function() {
this.subscribe('singlePlayer', this.params.slug);
if(this.ready()) {
var singlePlayer = this.data();
if (singlePlayer) {
if (singlePlayer.upgrade) {
this.subscribe('upgrades', this.params.slug);
}
}
this.next();
} else {
this.render('loading');
}
}],
data: function() {
return Games.findOne({slug: this.params.slug});
},
waitOn: function() { return [Meteor.subscribe('singleGame', this.params.slug)]}
});
Источник: https://github.com/EventedMind/iron-router/blob/devel/Guide.md#subscriptions
Я думаю, что это изменение было необходимо, потому что .wait
модель рассматривалась как ненужные цепочки и склонен к (кодированию) ошибкам. Кроме того, явная обработка .next()
при переопределении onBeforeAction
теперь обеспечивает правильное время для этого крючка (и, вероятно, большинство, если не всех других крючков).
Какая версия железного маршрутизатора? Также: зачем использовать массивные (квадратные) скобки вокруг обратного вызова 'onBeforeAction'? Я еще не видел этот синтаксис. Тем не менее, я использовал только железный маршрутизатор 0.9.4. –