如何在Ember.js中获得控制器的示例?

kxeu7u2r  于 2022-11-05  发布在  其他
关注(0)|答案(4)|浏览(130)

我正在尝试访问一个控制器的示例,该示例已经使用App.initialize()自动连接;
我已经尝试了下面的方法,但是它返回的是一个类,而不是一个示例。
Ember.get('App.router.invitesController')

lo8azlld

lo8azlld1#

我在我的博客上有一个关于这个主题的快速帖子。这是一个有点大的不同的方法,但似乎工作得很好Ember.js RC1。
请访问:http://emersonlackey.com/article/emberjs-instance-of-controller-and-views
基本的想法是这样做:

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

fumotvh32#

此答案适用于RC 1/RC 2。
现在你可以使用needs声明来使所需的控制器可访问。
假设我想从我的ApplicationController中得到一些东西,我可以做如下操作:

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

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

现在,在我的ApplicationController上下文中,我可以只执行this.get('isPublic')

ars1skjm

ars1skjm3#

您可以通过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');
            }
        })
    })
});​
baubqpgj

baubqpgj4#

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

const controllerName = 'invites';
Ember.getOwner(this).lookup(`controller:${controllerName}`));
  • 在Ember 2.4 - 3.4中对我有效 *

相关问题