【发布时间】:2012-10-27 05:56:35
【问题描述】:
我正在尝试访问已使用 App.initialize() 自动连接的控制器实例;
我已经尝试了以下方法,但它返回的是一个类而不是一个实例。
Ember.get('App.router.invitesController')
【问题讨论】:
我正在尝试访问已使用 App.initialize() 自动连接的控制器实例;
我已经尝试了以下方法,但它返回的是一个类而不是一个实例。
Ember.get('App.router.invitesController')
【问题讨论】:
我的博客上有一篇关于这个确切主题的快速帖子。这是一个有点大的不同方法,但似乎适用于 Ember.js RC1。
查看:http://emersonlackey.com/article/emberjs-instance-of-controller-and-views
基本的想法是做这样的事情:
var myController = window.App.__container__.lookup('controller:Posts');
【讨论】:
此答案适用于 RC1/RC2。
现在您可以使用needs 声明来使所需的控制器可访问。这是一个例子:
假设我想从我的SettingsController 从我的ApplicationController 中获取一些东西。我可以做到以下几点:
App.SettingsController = Ember.Controller.extend({
isPublic: true
});
App.ApplicationController = Ember.Controller.extend({
needs: 'settings',
isPublicBinding: 'controllers.settings.isPublic'
});
现在在我的ApplicationController 的上下文中,我可以做this.get('isPublic')
【讨论】:
needs: ['settings'] 使用最新的 EmberJS 使其工作。
您可以通过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');
}
})
})
});
【讨论】:
您可以使用lookup method of Application instance 按名称访问任何控制器实例。 要获取应用程序实例,您可以从任何路由或控制器使用getOwner。
const controllerName = 'invites';
Ember.getOwner(this).lookup(`controller:${controllerName}`));
在 Ember 2.4 - 3.4 中为我工作。
【讨论】: