覆盖initComponent()方法

时间:2013-04-25 09:40:36

标签: extjs4 extjs-mvc

我想覆盖Ext.grid.column.Column类的initComponent()方法。但有些人如何执行所有这些线条。基本上我想从元素中删除侦听器,并希望将其分配给其他元素。

Ext.override(Ext.grid.column.Column, 
{     
    initComponent: function(){
         .
         .  //All lines are as it is till me.callParents(); 
         .
         .
         .
         .
         .
         .
         .
         // Initialize as a HeaderContainer
         me.callParent(arguments);

        me.on({      <<<------------------------------Do not need these.
            element:  'el',
            click:    me.onElClick,
            dblclick: me.onElDblClick,
            scope:    me
        });
        me.on({      <<<------------------------------Do not need these.
            element:    'titleEl',
            mouseenter: me.onTitleMouseOver,
            mouseleave: me.onTitleMouseOut,
            scope:      me
        });

    }

}

我不想将监听器附加到“el”和“titleEl”,所以我删除了这些行。但有些人还是如何添加听众。 我也在AfterRender函数中写了me.un()。甚至它将听众添加到“El”和“titleEl”

任何人都可以指导我在哪里错了?????

1 个答案:

答案 0 :(得分:2)

使用Ext.override创建子类,而不是使用Ext.define。重新定义initComponent方法后,您可以使用this.superclass.superclass.initComponent.call跳过Ext.grid.column.Column#initComponent

Ext.define('MyApp.grid.column.Column', {
    extend: 'Ext.grid.column.Column',
    alias:  'widget.mycolumn',

    initComponent: function(){
        // Pre-initComponent from column class here

        // Ext.grid.header.Container#initComponent
        this.superclass.superclass.initComponent.call(this);

        // Do optional stuff here
    }
});

然后,当您创建新列时,使用xtype: 'mycolumn'来使用您自己的实现,同时仍然可以根据需要使用常规列。