Search code examples
javascriptember.jsember-router

How to access controller from route in Ember?


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.


Solution

  • 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