如何在Ember.js中获取控制器的实例?

时间:2012-10-27 05:56:35

标签: ember.js ember-old-router

我正在尝试访问使用App.initialize()自动连接的控制器实例;

我已经尝试过以下但它返回的是一个Class而不是一个实例。

Ember.get('App.router.invitesController')

4 个答案:

答案 0 :(得分:19)

我在我的博客上有关于这个确切主题的快速帖子。这是一个不同的方法,但似乎适用于Ember.js RC1。

请查看:http://emersonlackey.com/article/emberjs-instance-of-controller-and-views

基本思想是做一些事情:

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

答案 1 :(得分:9)

这个答案适用于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')

答案 2 :(得分: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');
            }
        })
    })
});​

答案 3 :(得分:0)

您可以使用lookup method of Application instance通过名称访问任何控制器实例。 要获取应用程序实例,可以在任何路由或控制器中使用getOwner

const controllerName = 'invites';
Ember.getOwner(this).lookup(`controller:${controllerName}`));

在Ember 2.4-3.4中为我工作。