在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全局更改所有网格,但我想为我的网格类设置它。
答案 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
类定义中指定自定义标头配置来以声明方式完成所有操作。