在Ext JS类定义中设置默认列配置“menuDisabled”

时间:2015-06-23 19:08:48

标签: extjs

在ExtJS 5.1中,我想定义一个扩展Ext.grid.Panel的类,它设置列的默认值,特别是menuDisabled属性。我不希望这个集合用于所有网格,只是这个类。在Ext 5中,此属性已更改为列特定属性,您可以通过以下方式在网格配置中设置默认值:

columns: {
    defaults: { menuDisabled: true },
    items: [...]
}

如何在类定义中设置它,以便此类的用户不必设置它?我尝试过不同的咒语,如:

Ext.define('MyGridPanel', {
    extend: 'Ext.grid.Panel',
    menuDisabled: true
});

Ext.define('MyGridPanel', {
    extend: 'Ext.grid.Panel',
    defaults: {
        columns: {
            menuDisabled: true
        }
    }
});

我能够使用答案here全局更改所有网格,但我想为我的网格类设置它。

2 个答案:

答案 0 :(得分:0)

不确定是否有更好的方法,但实现此目的的一种方法是覆盖组件的initComponent方法,如下所示:

initComponent : function () {
    // for each column
    Ext.Array.each(this.columns, function (col) {

       // set menuDisabled to true
        Ext.apply(col, {
            menuDisabled : true
        });

    });

    this.callParent(arguments);
}  

答案 1 :(得分:0)

使用cpastore84的答案或者可能更好的方法,因为它不会强制columns配置的限制必须始终是一个数组:

Ext.define('MenuDisabledGrid', {
    extend: 'Ext.grid.Panel',
    initComponent: function() {
        this.callParent(arguments);
        this.headerCt.items.each(function(c){
            c.menuDisabled = true;
        });
    }
});

通过initComponent执行此操作似乎是不可避免的,因为在Ext.panel.Table的源代码中,标头是以这种方式创建的:

me.headerCt = new Ext.grid.header.Container(headerCtCfg);

而不是

me.headerCt = Ext.create(headerCtCfg);

在后一种情况下,我们可以通过在MenuDisabledGrid类定义中指定自定义标头配置来以声明方式完成所有操作。