Javascript 如何从Ember中的route访问控制器?

Javascript 如何从Ember中的route访问控制器?,javascript,ember.js,ember-router,Javascript,Ember.js,Ember Router,是否有任何简单的方法从路由访问控制器 <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' App.Applicati

是否有任何简单的方法从路由访问控制器

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

App.ApplicationRoute=Ember.Route.extend
活动:
someAction:(用户)->
console.log“从currentUser controller给我提供名称”

someAction非常通用,我认为ApplicationRoute是它的最佳位置。

我认为在这种情况下,控制器的方法应该可用:

App.ApplicationRoute = Ember.Route.extend
  events:
    someAction: (user) ->
      console.log this.controllerFor("currentUser").get("name")
更新回复评论中的问题:

这完全取决于你想做什么。担心干这种基本方法,在我看来没有多大意义

在你的情况下,我会这样做:

App.ApplicationRoute = Ember.Route.extend
  events:
    someAction: (user) ->
      this.controllerFor("currentUser").decrementKudos();
      // implement the decrementKudos in your controller
但我想存储这一个控制器也应该可以,如果这对您来说太多代码:

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

在较新版本的ember中,您可以在route中访问当前route的控制器,如下所示

余烬2.5版

currentUserCon : this.controller
如果您想访问其他路由控制器,请使用
控制器的方法

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

谢谢,但是有可能获得对该属性的引用吗?例如,我可以将其存储在变量中以便对其进行操作吗
name=this.controllerFor('currentUser')。获取'name'
返回“hello,{name}
有可能吗?以这种方式多次访问控制器不是干巴巴的:)例如,这将是一种滥杀:
this.controllerFor('currentUser')。设置'kudoslight',this.controllerFor('currentUser')).get'kudosleeft'-1
:)@wojtekrych还有,这:我不确定这是什么时候发生的,但在Ember 1.12.0中,
controllerFor
已被弃用。你可以使用Ember.inject.controller()注入它,或者从路由中找到(至少在我的Ember 2.14应用程序中)要使用的this.controller属性至少通过
activate()
route钩子,
this.controller
未定义的
将返回控制器。像@TomWayson一样,我发现这在Ember 2.13中不起作用。文档建议它在那里,但如果在尝试使用它时失败。我能够成功地使用
此控制器。