我試圖訪問已使用App.initialize()自動連線的控制器的實例;如何在Ember.js中獲取控制器的實例?
我試過下面的但它返回一個類不是一個實例。
Ember.get('App.router.invitesController')
我試圖訪問已使用App.initialize()自動連線的控制器的實例;如何在Ember.js中獲取控制器的實例?
我試過下面的但它返回一個類不是一個實例。
Ember.get('App.router.invitesController')
這個答案可與RC1/RC2。
現在您可以使用needs
聲明來使所需的控制器可訪問。以下是一個示例:
假設我想從ApplicationController
的SettingsController
中獲得某些內容。我能做到以下幾點:
App.SettingsController = Ember.Controller.extend({
isPublic: true
});
App.ApplicationController = Ember.Controller.extend({
needs: 'settings',
isPublicBinding: 'controllers.settings.isPublic'
});
現在我ApplicationController
的情況下,我可以做this.get('isPublic')
您可以通過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');
}
})
})
});
我有一個快速的一篇關於我的博客上這個確切的主題。這是一個有點不同的方法,但似乎Ember.js RC1很好。
瞧瞧吧:http://emersonlackey.com/article/emberjs-instance-of-controller-and-views
的基本思路是做這樣的事情:
var myController = window.App.__container__.lookup('controller:Posts');
耶胡達有這個有趣的評論。他實際上是從容器中改變了__container__,因爲他不想讓人們使用這個「私人」api。我需要從我的主應用程序應用程序訪問一個控制器,並且看不到其他選擇。實際上,通過討論話語的源代碼,他們也在做這樣的事情。 。話語.__容器__查找( '控制器:模態')得到( 'currentView'); (Discourse是由Steve Atwood創建的,他創建了Stack Overflow,所以它似乎是目前唯一的選擇。 – WallMobile
It ... wokrs,thank you。但是,我們沒有那麼蹩腳嗎? – fabien
我得到了這通過使用'needs:['settings']'來使用最新的EmberJS。 –