【问题标题】:IronRouter data property runs before waitOn?Iron Router 数据属性在 waitOne 之前运行?
【发布时间】:2016-03-18 17:58:39
【问题描述】:

说我有这条路线:

  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。

【问题讨论】:

  • 你能分享你的 publish() 吗?另外,只有一个订单还是在 publish() 中处理?
  • 你可以试试var data = Orders.findOne(); return data && data._id,直到你找到真正的答案,我想。
  • @smoksnes,我已经添加了我的发布。这只是一个标准的“发布所有内容”。 Orders 集合中目前有许多订单。

标签: meteor iron-router


【解决方案1】:

好的,这是我必须做的以消除错误并让我的路线正常运行:

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

我不得不将 this.ready() 放在 data 函数中,这非常奇怪,因为我认为我以前不需要这样做,而且我没有看到有人提到有在 Iron Router 中执行此操作?

不管怎样,人们说 Iron Router 的 data 函数可能有问题,它会不断地重新运行路由器代码,因为 Iron Router 认为路由器中应该有反应性。我不知道这是怎么回事。

【讨论】:

  • 有趣!感谢您的信息。
【解决方案2】:

我相信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();
      }
    }
  });

【讨论】:

  • 还是不行。发生了一些非常非常奇怪的事情。我禁用了除此之外的所有路线,并完全像您在上面所做的那样编写它。我仍然得到cannot read property '_id' of undefined,但页面加载后我可以在控制台中执行Orders.findOne()._id,它会返回一个ID。
  • 查看我的调试器,调试器首先在waitOn 函数上停止,然后在data 函数上,然后在waitOn 函数上再次,然后在action 函数检查this.ready() - 它是true,因此它呈现页面,然后在data 函数上再次...就是这样。我已经删除并重新添加了铁路由器。所有软件包都已更新。
猜你喜欢
  • 2015-04-06
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 2015-03-14
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 1970-01-01
相关资源
最近更新 更多