控制器上缺少xtype别名,在refs中使用

yx2lnoni  于 2022-09-26  发布在  其他
关注(0)|答案(2)|浏览(113)

我对控制器上的xtype和别名有点困惑。这是我的控制器,我从未添加xtype或别名。是否默认创建一个?我似乎在控制器示例上找不到它。
据我所知,如果我创建一个xtype,那么一个别名会自动分配一个widget前缀?别名创建和xtype的分配是否也会减少小部件前缀?
我之所以问这个问题,是因为我正在另一个控制器中执行getController,我想知道是否可以在另一个控件下使用xtype分配ref。
这可能吗?或者我应该始终呼叫getController?

carvr3hs

carvr3hs1#

您应该使用getController获取对另一个控制器的引用。无法使用别名或xtype。如果您可以在控制器B上设置控制器A的参考,反之亦然,会发生什么?
但是……还有其他方法可以从其他控制器调用方法。不过,这些示例尚未经过测试。
例如,您可以从控制器b上的控制器a借用方法:

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');
    }
});
jfewjypa

jfewjypa2#

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

相关问题