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

Ember: получить экземпляр маршрута от контроллера

У меня многоступенчатый поток, который пользователь может пройти последовательно или перейти прямо к разделу (если разделы между ними завершены). Я думаю, что эта логика должна быть в объекте Route. Однако изнутри контроллера, как мне получить доступ к экземпляру маршрута. Например, было бы идеально, чтобы иметь возможность сделать что-то вроде этого в контроллере:

App.Flow = Em.ObjectController.extend({
  submit: function(){
    // Validation and XHR requests
    // ...

    // Go to the next step
    route.goToNextStep();
  }
}

РЕШЕНИЕ (как было предложено Майком):

App.Flow = Em.ObjectController.extend({
  submit: function(){
    // ...
    this.get('target').send('gotoNextStep');
  }
}

App.FlowRoute = Ember.Route.extend({
  events: {
    gotoNextStep: function(){
      // ...
      this.transitionTo(routeName);
    }
  }
}
4b9b3361

Ответ 1

Внутри контроллера вы можете получить доступ к маршрутизатору через this.get('target'). Поэтому this.get('target').send('goToNextStep') должен работать.

Ответ 2

Вам нужно получить маршрут для таких условий, поэтому от контроллера просто скажите,

App.Flow = Em.ObjectController.extend({
  submit: function(){
    var self =this;
    // Validation and XHR requests
    // ...

    // Go to the next step
    self.send('goToNextStep');
  }
}

и определите ваше событие goToNextStep в хеше события маршрута

Ответ 3

'this' - это то, что указывает на маршрутизатор, но вы не должны добавлять какие-либо методы к этому прототипу. Вместо этого сделайте какое-то событие, которое инициирует переход к следующему шагу.