Ответ 1
Внутри контроллера вы можете получить доступ к маршрутизатору через this.get('target')
. Поэтому this.get('target').send('goToNextStep')
должен работать.
У меня многоступенчатый поток, который пользователь может пройти последовательно или перейти прямо к разделу (если разделы между ними завершены). Я думаю, что эта логика должна быть в объекте 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);
}
}
}
Внутри контроллера вы можете получить доступ к маршрутизатору через this.get('target')
. Поэтому this.get('target').send('goToNextStep')
должен работать.
Вам нужно получить маршрут для таких условий, поэтому от контроллера просто скажите,
App.Flow = Em.ObjectController.extend({
submit: function(){
var self =this;
// Validation and XHR requests
// ...
// Go to the next step
self.send('goToNextStep');
}
}
и определите ваше событие goToNextStep
в хеше события маршрута
'this' - это то, что указывает на маршрутизатор, но вы не должны добавлять какие-либо методы к этому прототипу. Вместо этого сделайте какое-то событие, которое инициирует переход к следующему шагу.