Свойство данных IronRouter запускается до waitOn?

Скажи, что у меня есть этот маршрут:

  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 Console и делаю Orders.findOne()._id и сразу же появляется идентификатор.

По какой-то причине это выглядит как data выполняется до подписки в waitOn готов? Я использую последний Железный Маршрутизатор.

2 ответа

Хорошо, вот что мне нужно было сделать, чтобы устранить ошибку и заставить мой маршрут нормально функционировать:

  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?

Несмотря на это, люди говорят, что Железный Маршрутизатор data функция может содержать ошибки и постоянно перезапускать код маршрутизатора, потому что Iron Router считает, что в маршрутизаторе должна быть реактивность. Я не знаю, что с этим происходит.

Я верю 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();
      }
    }
  });
Другие вопросы по тегам