J'ai un flux en plusieurs étapes que l'utilisateur peut parcourir de manière séquentielle ou passer directement à une section (si les sections situées entre les deux sont terminées). Je pense que cette logique devrait être dans l'objet Route. Cependant, depuis le contrôleur, comment puis-je accéder à l'instance de route. Par exemple, il serait idéal de pouvoir faire quelque chose comme ceci dans le contrôleur:
App.Flow = Em.ObjectController.extend({
submit: function(){
// Validation and XHR requests
// ...
// Go to the next step
route.goToNextStep();
}
}
Depuis un contrôleur, vous pouvez accéder au routeur via this.get('target')
. Donc, this.get('target').send('goToNextStep')
devrait fonctionner.
Ainsi:
App.Flow = Em.ObjectController.extend({
submit: function(){
// ...
this.get('target').send('gotoNextStep');
}
}
App.FlowRoute = Ember.Route.extend({
events: {
gotoNextStep: function(){
// ...
this.transitionTo(routeName);
}
}
}
Vous devez obtenir la route pour de telles conditions, alors le contrôleur vous dit:
App.Flow = Em.ObjectController.extend({
submit: function(){
var self =this;
// Validation and XHR requests
// ...
// Go to the next step
self.send('goToNextStep');
}
}
et définissez votre événement goToNextStep
dans le hachage d'événement de votre itinéraire
'this' pointe vers le routeur, mais vous ne devez ajouter aucune méthode à ce prototype. Créez plutôt une sorte d’événement qui déclenche la transition vers l’étape suivante.