我有一条我多次打电话的路线。我必须订阅两个集合来获取所有数据,这里是一个快照:
var one = new Blaze.ReactiveVar(false);
var two = new Blaze.ReactiveVar(false);
this.route('stopIndex', {
path: '/stop/:section/:stop_id',
waitOn: function() {
Meteor.call('getTripIdsForStop', {
stop_id: this.params.stop_id,
from: fromNow(),
to: toMax(),
db: prefix
}, function(err, ids) {
DEBUG && console.log('TRIP_IDS:', ids);
Meteor.subscribe(prefix + '_trips', {
trip_id: {$in: ids}
}, function() {
one.set(true);
});
Meteor.subscribe(prefix + '_stop_times', {
trip_id: {$in: ids}
}, function() {
two.set(true);
});
});
return [
function () { return one.get(); },
function () { return two.get(); }
];
},
我第一次打电话给路线,一切顺利。第二次,one
和two
变量已经设置为true,因此waitOn
不会等待,我的模板上会收到no data
消息几秒钟,直到收集回应。我已尝试使用waitOk
方法的第一行:
one.set(false);
two.set(false);
但这会使waitOn
永远等待。我做错了什么或遗失了什么?谢谢你的帮助。
答案 0 :(得分:0)
我已经解决了这个问题:
Router.onStop(function() {
one.set(false);
two.set(false);
});
使ReactiveVars
无效并将等待。我还将所有代码从waitOn
移到了data
。现在waitOn
是这样的:
return [
function () { return one.get(); },
function () { return two.get(); }
];