web-dev-qa-db-fra.com

Ember: Obtenir l'instance de route du contrôleur

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();
  }
}
32
Jeremy Gillick

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);
    }
  }
}
38
Mike Grassotti

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

2
Hyder

'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.

0
ulisesrmzroche