How to access controller from route in Ember?

◇◆丶佛笑我妖孽 提交于 2019-12-12 09:28:38

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!