2012-10-27 55 views

回答

9

這個答案可與RC1/RC2。

現在您可以使用needs聲明來使所需的控制器可訪問。以下是一個示例:

假設我想從ApplicationControllerSettingsController中獲得某些內容。我能做到以下幾點:

App.SettingsController = Ember.Controller.extend({ 
    isPublic: true 
}); 

App.ApplicationController = Ember.Controller.extend({ 
    needs: 'settings', 
    isPublicBinding: 'controllers.settings.isPublic' 
}); 

現在我ApplicationController的情況下,我可以做this.get('isPublic')

+1

我得到了這通過使用'needs:['settings']'來使用最新的EmberJS。 –

3

您可以通過router.get('invitesController')路由器的操作中訪問控制器實例,見http://jsfiddle.net/pangratz666/Pk4k2/

App.InvitesController = Ember.ArrayController.extend(); 

App.Router = Ember.Router.extend({ 
    root: Ember.Route.extend({ 
     route: '/', 
     index: Ember.Route.extend({ 
      route: '/', 
      connectOutlets: function(router, context) { 
       var invitesController = router.get('invitesController'); 
      }, 
      anAction: function(router) { 
       var invitesController = router.get('invitesController'); 
      } 
     }) 
    }) 
});​ 
19

我有一個快速的一篇關於我的博客上這個確切的主題。這是一個有點不同的方法,但似乎Ember.js RC1很好。

瞧瞧吧:http://emersonlackey.com/article/emberjs-instance-of-controller-and-views

的基本思路是做這樣的事情:

var myController = window.App.__container__.lookup('controller:Posts'); 
+1

耶胡達有這個有趣的評論。他實際上是從容器中改變了__container__,因爲他不想讓人們使用這個「私人」api。我需要從我的主應用程序應用程序訪問一個控制器,並且看不到其他選擇。實際上,通過討論話語的源代碼,他們也在做這樣的事情。 。話語.__容器__查找( '控制器:模態')得到( 'currentView'); (Discourse是由Steve Atwood創建的,他創建了Stack Overflow,所以它似乎是目前唯一的選擇。 – WallMobile

+1

It ... wokrs,thank you。但是,我們沒有那麼蹩腳嗎? – fabien

相關問題