2013-03-07 144 views
4

在emberjs PRE2我們可以在 在控制器訪問控制或任何方法從另一個控制器方式如下:Emberjs - 如何從另一個控制器」

App.get('訪問一個控制器的方法路由器)獲得( 'navController')方法1();

任何人都可以建議什麼可能是類似的代碼爲emberjs rc1

感謝

+0

我一直努力遵循數據將行動向下推進範式。你如何做類似的事情是使用建議的依賴注入@Def_Os,但是在應用程序路由上執行。 – 2016-03-21 07:01:01

回答

3

裏面一個ControllerRoute你可以嘗試

this.controllerFor("nav").method1() 

注意

這是當有人問正確的答案,但因爲controllerFor已過時,請檢查joscas

+0

在這種情況下,您可以通過點擊左側的刻度標記來接受答案 – 2013-03-07 07:42:47

+0

有什麼方法可以從視圖調用控制器方法? – 2013-03-08 17:37:14

+5

其實controllerFor已棄用....所以我們應該使用需要 – 2013-03-08 18:12:20

17

由於controllerFor已過時,我認爲一個更正確的方法是用需求

this.get('controllers.nav').method1() 

它需要聲明你需求在你的控制器:

App.YourController = Ember.ObjectController.extend({ 
    needs: ['nav'], 
    .... 
+1

這應該是新接受的答案。 – DelphiLynx 2014-02-04 14:35:50

+0

文檔:http://emberjs.com/guides/controllers/dependencies-between-controllers/ – givanse 2014-05-09 05:04:35

2

在餘燼2,此作品通過注入您想要訪問的控制器:

export default Ember.Controller.extend({ 
    nav: Ember.inject.controller(), 
}); 

或者,如果你要指定控制器名稱不同的名稱:

export default Ember.Controller.extend({ 
    navController: Ember.inject.controller('nav'), 
}); 

然後,您可以像這樣訪問注入控制器的方法:

this.get('navController').method1() 
+1

我一直在試圖按照數據下來的行動範式。你如何做類似的事情是使用建議的依賴注入@Def_Os,但是在應用程序路由上執行。 然後,不要直接調用該方法,只需發送該操作並讓它冒泡到應用程序路由。這避免了在大型項目中難以管理的2個控制器之間複雜的直接相關性。 – 2016-03-21 07:02:27

相關問題