控制器上缺少xtype / alias,在refs中使用

Missing xtype / alias on a Controller, using in refs

本文关键字:refs alias xtype 控制器      更新时间:2023-09-26

我对控制器上的xtype和alias有点困惑。这是我的控制器,我从未添加过xtype或别名。是默认创建的吗?我似乎没有在控制器实例上找到它。

据我所知,如果我创建一个xtype,那么别名会自动分配一个前缀widget?这是否也适用于别名创建和xtype将分配更少的小部件前缀?

我问的原因是我在另一个控制器中做getController,我想知道我是否可以在另一个控制器下分配一个ref使用xtype。

这可能吗?还是应该一直调用getController?

您应该使用getController来获取对另一个控制器的引用。没有办法使用别名或xtype。如果你能将控制器A的参考值设置在控制器B上,反之亦然,会发生什么?

但是…还有其他方法可以从另一个控制器调用方法。这个例子没有经过测试。

例如,你可以从控制器a借用控制器b的方法:

Ext.define('MyApp.app.ControllerA', {
    extend : 'Ext.app.Controller',
    requires : [
        'MyApp.app.ControllerB'
    ],
    ...
}, function(Controller) {
    Controller.borrow(MyApp.app.ControllerB, ['methodA', 'methodB', 'methodC', 'methodD']);
});

你也可以(我更喜欢这个,因为异步应用程序应该是事件驱动的)监听从控制器触发的事件:

Ext.define('MyApp.controller.ControllerA', {
    extend: 'Ext.app.Controller',
    id: 'controllerAId',
    init: function() {
        var me = this;
        me.fireEvent('bar');
    }
});
Ext.define('MyApp.controller.ControllerB', {
    extend: 'Ext.app.Controller',
    init: function() {
        var me = this;
        me.listen({
            global: {
                ...
            },
            controller: {
                '*': {
                    foobar: 'onAnyFooBar'
                },
                '#controllerAId': {
                    bar: 'onFooBar'
                }
            },
            component: {
                ...
            },
            store: {
                ...
            }
        });
    },
    onFooBar: function(controller) {
        console.log('Controller B', 'onFooBar');
    }
});

我会去监听你试图访问的控制器中的事件,你可以从任何你想要的地方触发它。使用getcontroller (App.controller.controllerName)的问题是,如果文件没有加载它,它将加载到您的应用程序中,这可能会有一些负面的性能问题(例如,如果控制器很大,可能需要很长时间才能从服务器提取资源等)。