问题
Is there any foolproof way to access controller from a route?
<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'
The someAction is very general and I think that ApplicationRoute is the best place for it.
回答1:
I think the method controllerFor
should be available in this event:
App.ApplicationRoute = Ember.Route.extend
events:
someAction: (user) ->
console.log this.controllerFor("currentUser").get("name")
Update in response to the questions in the comments:
It all depends on what you want to do. Worrying about DRY on such a basic method, does not make much sense imho.
In your kudos left case I would do this:
App.ApplicationRoute = Ember.Route.extend
events:
someAction: (user) ->
this.controllerFor("currentUser").decrementKudos();
// implement the decrementKudos in your controller
But I guess storing this one controller should also work, if this is too much code for you:
App.ApplicationRoute = Ember.Route.extend
currentUserCon : this.controllerFor("currentUser")
events:
someAction: (user) ->
this.currentUserCon.decrementKudos();
// implement the decrementKudos in your controller
回答2:
In the newer version of ember you can access current route's controller in route as below
Ember version 2.5
currentUserCon : this.controller
if you want to access other routes controller then use controllerFor
method.
this.controllerFor('path to controller'); //put path to controller as parameter.
来源:https://stackoverflow.com/questions/15911704/how-to-access-controller-from-route-in-ember