web-dev-qa-db-ja.com

エンバーのルートからコントローラーにアクセスする方法は?

ルートからコントローラーにアクセスするための簡単な方法はありますか?

<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が最適です。

28
wryrych

このイベントでは、メソッド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

ただし、コードが多すぎる場合は、この1つのコントローラーを格納することもできます。

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

emberの新しいバージョンでは、以下のようにルート内の現在のルートのコントローラーにアクセスできます

Emberバージョン2.5

currentUserCon : this.controller

他のルートコントローラにアクセスする場合は、controllerForメソッドを使用します。

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