2012-11-04 27 views
0

雖然connectOutlet("basename")自動創建一個的實例BasenameController,我想知道是否有辦法使用{{view}} -helper來做同樣的事情。使用{{view}}助手實例化控制器類?

我已經試過幾件事情我已經在示例中所看到的,但他們不似乎工作:

{{view controllerBinding=App.BasenameController}}

{{view controllerBinding=App.basenameController}}

{{view controllerBinding="App.BasenameController"}}

{{view controllerBinding="App.basenameController"}}

我也嘗試過使用controller而不是controllerBinding來做同樣的事情,遺憾的是沒有成功,我也無法找出兩者之間的區別究竟在哪裏。

有誰知道如何實現我的目標?

+1

'connectOutlet(「basename」)'創建* BasenameController *的實例是不正確的。它實際上在你調用'connectOutlet'的控制器的'controllers'集合上查找'basenameController'。通常,'controllers'屬性將指向路由器。所以你實際得到的是* BasenameController *的實例,路由器可以訪問並且在應用程序初始化時創建一次。 –

+0

感謝您的澄清! – kraftwer1

+0

我發現這個答案更有幫助http://stackoverflow.com/questions/11318572/right-way-to-do-navigation-with-ember –

回答

1

您可能想要使用插座。 connectOutlet/outlet函數用於渲染其他控制器/視圖對。

可以說我們有一個人的觀點,但在該視圖內,我們想要有另一個控制器/視圖對。爲此,我們需要使用一個命名插座,我們的模板將如下所示。

Person View! 
{{name}} = the person's name! 
{{controller}} = PersonController! 
{{outlet other}} = our outlet 

然後在路由器裏面,當你要到另一個控制器/視圖連接到插座可以上personController簡單的使用connectOutlet。

router.get('personController').connectOutlet('other', 'other'); 

這將連線OtherController和奧瑟維尤在一起,並在模板中顯示出來。第一個參數是出口名稱,第二個是控制器/視圖。

這使您可以輕鬆地將不同的控制器和視圖交換到該插座。例如,使用不同的connectOutlet API,我們可以

router.get('personController').connectOutlet({ 
outletName: 'other', 
controller: router.get('carsController'), 
viewClass: App.CarsView 
}); 

...

順便說一下,回答你原來的問題。通過執行此操作,您可以從視圖中訪問其他控制器:{{view controllerBinding="controller.target.otherController"}}。每個控制器都有一個指向路由器的目標屬性。但是,我不建議使用此代碼。它很脆弱,很難測試,很難調試,並且會在未來回來並咬你。

相關問題