2013-04-09 125 views
25

从路由访问控制器是否有任何万无一失的方法?如何从Ember中的路由访问控制器?

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

someAction是非常普遍的,我认为ApplicationRoute是最好的地方。

回答

25

我认为方法controllerFor应在此事件中是可用:

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

更新响应于commments问题:

这一切都取决于你想要做什么。在这样一个基本的方法上担心DRY,没有多少意义。

在你的荣誉离开的情况下,我会做这样的:

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 
+0

谢谢,但是有可能获得对该属性的引用,例如可以将它存储在变量中以便我可以对其进行操作吗? 'name = this.controllerFor('currentUser')。get'name'' 'return“hello,#{name}' 是否有可能?以多次访问控制器的方式不是DRY :) – wryrych 2013-04-10 06:15:27

+0

例如这将是一个过度杀伤: 'this.controllerFor('currentUser')。set'kudosLeft',this.controllerFor('currentUser')。get'kudosLeft' - 1' :) – wryrych 2013-04-10 06:17:34

+1

请参阅我的更新回复。 。 – mavilein 2013-04-10 09:56:07

7

在更新版本的烬,你可以访问当前路线的控制器在路线如下

Ember版本2.5

currentUserCon : this.controller 

如果要访问其他路由控制器,则使用controllerFor方法。

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

I' (至少在我的Ember 2.14应用程序中)发现,至少通过activate()路由钩子,this.controller是未定义的,但controllerFor('cu rrent.route.name')'将返回控制器。 – 2017-09-05 21:06:18

相关问题