28

有什么万无一失的方法可以从路由访问控制器吗?

<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 是它的最佳位置。

4

2 回答 2

30

我认为该方法controllerFor应该在这种情况下可用:

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

针对评论中的问题进行更新:

这一切都取决于你想做什么。在这种基本方法上担心 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
于 2013-04-09T20:42:27.323 回答
10

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

灰烬 2.5 版

currentUserCon : this.controller

如果您想访问其他路由控制器,请使用controllerFor方法。

this.controllerFor('path to controller'); //put path to controller as parameter.
于 2016-05-19T09:58:48.357 回答