流星铁:路由器Blaze.ReactiveVar多次调用

时间:2015-02-22 09:19:33

标签: meteor iron-router meteor-blaze

我有一条我多次打电话的路线。我必须订阅两个集合来获取所有数据,这里是一个快照:

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(); }
      ];
    },

我第一次打电话给路线,一切顺利。第二次,onetwo变量已经设置为true,因此waitOn不会等待,我的模板上会收到no data消息几秒钟,直到收集回应。我已尝试使用waitOk方法的第一行:

one.set(false);
two.set(false);

但这会使waitOn永远等待。我做错了什么或遗失了什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题:

Router.onStop(function() {
  one.set(false);
  two.set(false);
});

使ReactiveVars无效并将等待。我还将所有代码从waitOn移到了data。现在waitOn是这样的:

return [
    function () { return one.get(); },
    function () { return two.get(); }
  ];