如何从Ember的路线访问控制器?

时间:2013-04-09 20:19:31

标签: 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'

someAction非常通用,我认为ApplicationRoute是最适合它的地方。

2 个答案:

答案 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.