2012-07-26 92 views
2

如果我有一個使用Router architecture的應用程序,如何獲取父路由的控制器?Ember.js使用路由器體系結構獲取父路由的控制器

假設像

Router: Ember.Router.extend 
    enableLogging: true 
    root: Ember.Route.extend 
     main: Ember.Route.extend 
      route: '/' 
      connectOutlets: (router, event) -> 
       router.get('applicationController').connectOutlet('main') 
      editor: Ember.Route.extend 
       route: '/editor' 
       connectOutlets: (router, event) -> 
        router.get('mainController').connectOutlet('editor') 

路線那麼,如何將我的EditorController讓我MainController的舉行?

我試過@get('parentController')@get('parent'),並且@get('controller')沒有成功

回答

6

您可以通過控制器的target屬性來訪問路由器。

例如,在你的情況下,從任何控制器:

@get('target.mainController') 

或者,如果你不使用Ember公司的最新修訂版:

@getPath('target.mainController') 
+0

謝謝!看起來它實際上是'@getPath('taget.mainController')',因爲@get('target.mainController')'返回undefined。我會看看我是否在做任何不吉利的事情,你還可以嘗試確認嗎?在接受之前,我想確保這100%是正確的。 – wmarbut 2012-07-26 20:31:15

+0

當然,我很抱歉讓你困惑。使用'get'的路徑表達式是最近出現在最新版本中的東西。除非你跟蹤頭部,否則你確實應該使用'getPath'。更新了答案。 – 2012-07-26 21:03:39

2

根據我的理解,應用程序應該只有一個路由器,爲什麼我們不這樣做:

@get('App.router.mainController') 

我不知道什麼是正確的接近角!我覺得'目標'是存儲分派動作或事件的對象。

+0

謝謝,我可以證實這一點也有效! @Mike Aski首先得到了答案,所以他保留了答案,但我會贊成! :) – wmarbut 2012-07-27 02:15:01