【问题标题】:ExtJS: Missing xtype / alias on a Controller, using in refs?ExtJS:在控制器上缺少 xtype / 别名,在 refs 中使用?
【发布时间】:2015-09-11 15:37:43
【问题描述】:

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

据我所知,虽然我可能是错的,但如果我创建一个 xtype,那么一个别名会自动分配一个小部件前缀?别名创建也是如此,并且 xtype 将被分配更少的小部件前缀?

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

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

谢谢

【问题讨论】:

    标签: javascript extjs extjs4 extjs5


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-16
        • 1970-01-01
        • 2023-03-11
        • 2014-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-07
        相关资源
        最近更新 更多