extjs4 - 重写 initComponent() 方法

标签 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”添加了监听器

有人可以指导我哪里错了吗???

最佳答案

而不是使用 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'使用您自己的实现,同时仍然能够根据需要使用常规列。

关于extjs4 - 重写 initComponent() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16211380/

相关文章:

javascript - 如何显示与 Extjs 4 的链接?

javascript - Extjs4 创建混合

javascript - 按钮上的 overCls 在 ExtJS 中不起作用

extjs - 从 extjs 面板中选择一个容器

javascript - EXTJS - 在选项卡面板中的选项卡中导航时如何保持 DOM 更轻?

javascript - 列渲染,监听<i>标签的点击事件

ExtJS4 hbox 布局问题

php - 用于多个页面的 extJs MVC

javascript - ExtJs MVC 应用程序不会加载

javascript - ExtJS 4 中函数处理程序内的作用域