IronRouter数据属性在waitOn之前运行?

时间:2016-03-17 06:02:39

标签: meteor iron-router

说我有这条路线:

  Router.route('/order', {
    template: 'order',
    name: 'order',
    layoutTemplate: 'layout',
    waitOn: function(){
      return Meteor.subscribe('orders');
    },
    data: function(){
      return Orders.findOne()._id;
    }
  });

在服务器文件夹中:

Meteor.publish('orders', function(){
  return Orders.find();
});

在页面加载时,我得到cannot read property '_id' of undefined,指向Orders.findOne()._id

但我打开Chrome控制台并执行Orders.findOne()._id并立即弹出ID。

出于某种原因,在data中的订阅准备好之前似乎正在运行waitOn?我使用的是最新的Iron Router。

2 个答案:

答案 0 :(得分:1)

好的,这是我必须做的就是删除错误并使我的路由正常运行:

data

我不得不将data放在root_user_appversion 10.1.3.20函数内部,这非常奇怪,因为我以前认为我以前不需要这样做,并且我没有看到有人提到必须在铁路由器中执行此操作?

无论如何,人们都说Iron Router的10.1.3.20功能可能会出错并且不断重新运行路由器代码,因为Iron Router认为路由器中应该存在反应性。我不知道这是怎么回事。

答案 1 :(得分:0)

我相信模板呈现时会运行data,而action会控制它。尝试添加:

  Router.route('/order', {
    template: 'order',
    name: 'order',
    layoutTemplate: 'layout',
    waitOn: function(){
      return Meteor.subscribe('orders');
    },
    data: function() {
      return Orders.findOne()._id;
    },
    action: function() {
      if(this.ready()) {
        this.render();
      }
    }
  });