web-dev-qa-db-fra.com

Comment accéder au contrôleur à partir de la route dans Ember?

Existe-t-il un moyen infaillible d'accéder au contrôleur à partir d'un itinéraire?

<a href="#" class="btn" {{action "someAction" user}}>add</a>

App.ApplicationRoute = Ember.Route.extend
  events:
    someAction: (user) ->
      console.log 'give me name from currentUser controller'

La someAction est très générale et je pense que ApplicationRoute est le meilleur endroit pour cela.

28
wryrych

Je pense que la méthode controllerFor devrait être disponible dans cet événement:

App.ApplicationRoute = Ember.Route.extend
  events:
    someAction: (user) ->
      console.log this.controllerFor("currentUser").get("name")

pdate en réponse aux questions dans les commentaires:

Tout dépend de ce que vous voulez faire. Se soucier de DRY sur une telle méthode de base, ne fait pas grand-chose sens à mon humble avis.

Dans vos félicitations, je ferais ceci:

App.ApplicationRoute = Ember.Route.extend
  events:
    someAction: (user) ->
      this.controllerFor("currentUser").decrementKudos();
      // implement the decrementKudos in your controller

Mais je suppose que le stockage de ce contrôleur devrait également fonctionner, si c'est trop de code pour vous:

App.ApplicationRoute = Ember.Route.extend
  currentUserCon : this.controllerFor("currentUser")
  events:
    someAction: (user) ->
      this.currentUserCon.decrementKudos();
      // implement the decrementKudos in your controller
29
mavilein

Dans la nouvelle version de ember vous pouvez accéder au contrôleur de la route actuelle dans la route comme ci-dessous

Ember version 2.5

currentUserCon : this.controller

si vous souhaitez accéder à un autre contrôleur de routes, utilisez la méthode controllerFor.

this.controllerFor('path to controller'); //put path to controller as parameter.
8
murli2308