如何覆盖extJs Controller组件

时间:2016-12-08 04:19:42

标签: javascript extjs window override extjs5

我创建了一些我在不同产品中使用的通用组件。现在我有一个窗口和窗口控制器是通用的,我正在覆盖窗口类,以便在我们的产品中使用它。

我的通用窗口。

Ext.define('App.win.Panel', {
    extend: 'Ext.window.Window',
    closeAction:'destroy',
    maximizable:true,
    hideToolbar:false,
    requires: [
        'App.MyWinCon.PanelController'
    ],
    xtype: 'MyWin',
    name:'MyWin',

    controller: 'MyWinCon',
    layout: {
        type: 'border'
    },
    gridConfigs:{},
    initComponent:function(){
        var p=this;
       p.items = [{
        //items
       }];
        p.callParent(arguments);
    }
});

在我的产品应用中,我使用这样的覆盖:

var Window1 = Ext.create('App.win.Panel', {
            title: Windo,
            modal:true,
            height: '90%',
            width: '95%',
            parentGridObj:gridObj,
        });
        Window1.show();

那部分没有问题。窗口即将来临。 现在我有着类似的激情,我已经用通用编写了控制我会告诉你一小段代码

Ext.define('App.MyWinCon.PanelController', {
    extend: 'Ext.app.ViewController',

    alias: 'controller.MyWinCon',

    init: function(){
        var p = this;
        p.control({
        #:{
            beforeclose : function(this){
            // SOme code
            }
        }
       });     
    }

现在任何人都可以帮助我如何在我的应用程序中使用通用类编写的beforeclose或类似方法。 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你不能,或者它至少真的很复杂;但是有一个非常简单的方法,只需要最少的重构:

Ext.define('App.MyWinCon.PanelController', {
    extend: 'Ext.app.ViewController',

    alias: 'controller.MyWinCon',

    init: function(){
        var p = this;
        p.control({
        #:{
            beforeclose : p.beforeClose // just a reference to function below!
        }
       });     
    },
    beforeClose: function(component){ // thou ought not use a variable named "this"!
        // SOme code
    }

现在您可以从视图中访问该功能:

view.getController().beforeClose()