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

Posted

技术标签:

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

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

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

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

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

谢谢

【问题讨论】:

【参考方案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) 的问题是,如果文件未加载,它会将其加载到您的应用程序中,这可能会产生一些负面的性能问题(即,如果控制器很大可能需要很长时间才能从服务器等中提取资源)。

【讨论】:

以上是关于ExtJS:在控制器上缺少 xtype / 别名,在 refs 中使用?的主要内容,如果未能解决你的问题,请参考以下文章

ExtJs xtype类型介绍

Extjs - 在面板中设置焦点字段

具有多种 xtypes 的 ExtJS 5 网格小部件列

Extjs 4.1 提交表单 - 如何在 xtype: displayfield 中获取值

extjs xtype按钮样式变量

如何在 Extjs4 表单中填写 HtmlEditor xtype