ExtJS:控制器上缺少xtype /别名,在refs中使用?

时间:2015-09-11 15:37:44

标签: javascript extjs extjs4 extjs5

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

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

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

这可能吗?或者我应该总是调用getController吗?

由于

1 个答案:

答案 0 :(得分:0)

您应该使用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');
    }
});