从路线访问控制器是否有任何万无一失的方法?
<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是最适合它的地方。
答案 0 :(得分:27)
我认为方法controllerFor
应该在此事件中可用:
App.ApplicationRoute = Ember.Route.extend
events:
someAction: (user) ->
console.log this.controllerFor("currentUser").get("name")
更新以回应评论中的问题:
这一切都取决于你想做什么。担心这种基本方法的DRY,对imho没有多大意义。
在你的荣誉左翼我会这样做:
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
答案 1 :(得分:8)
在较新版本的ember中,您可以在路线中访问当前路线的控制器,如下所示
Ember版本2.5
currentUserCon : this.controller
如果要访问其他路径控制器,请使用controllerFor
方法。
this.controllerFor('path to controller'); //put path to controller as parameter.