Подтвердить что ты не робот

Meteor v 1.0 и Iron: Router

Кто-нибудь еще получает следующую ошибку от Iron-Router с момента обновления Meteor до версии 1.0?

Пожалуйста, разместите здесь, если вы знаете, как решить эту проблему.

Отправка маршрута никогда не отображается. Вы забыли позвонить this.next() в onBeforeAction?

Router.map(function () {
    Router.route('profileShow', {

        waitOn: function () {
            if (Meteor.user()) {
                Meteor.subscribe('userData');
            } else {
                this.next();
            }
        },

        data: function () {
            if (Meteor.user()) {
                return {profile: Meteor.user().profile};
            }
        }
    });
});
4b9b3361

Ответ 1

В новейшей версии Iron Router произошло непереходное совместимое изменение. Руководство по миграции говорит:

onRun и onBeforeAction теперь требуется вызвать вызов this.next() и больше не принимать аргумент pause(). Таким образом, поведение по умолчанию отменяется. Например, если у вас есть:

Router.onBeforeAction(function(pause) {
  if (! Meteor.userId()) {
    this.render('login');
    pause();
  }
});

Вам нужно обновить его до

Router.onBeforeAction(function() {
  if (! Meteor.userId()) {
    this.render('login');
  } else {
    this.next();
  }
});

Дополнительная информация

В вашем случае исправление по книге должно заключаться в том, чтобы добавить this.next() в конец onBeforeAction. Однако лучше использовать waitOn:

waitOn: function () {
  return Meteor.subscribe("userData");
}

Таким образом, вы можете установить loadingTemplate, который будет отображаться при загрузке подписки userData.