我有几个共享公共列的网格(问题不仅限于列,任何配置对象)。目前我正在做这样的事情:
//columns.js
var columns = {"reusable1": {...}, "reusable2": {...}};
//grid views
Ext.define('MyApp.view.Grid', {
columns: [
{text:'inline column1'},
columns.reusable1,
columns.reusable2,
{text:'inline column2'},
]
});
这可以完成工作,但是更好的方法是以类似的方式工作(不为每个配置文件创建唯一的xtype
,或修改constructor
或{{1}中的配置}})。我只是希望能够像以前一样将misc可重用的配置文件内联。
答案 0 :(得分:1)
我认为大多数其他选项可能会降低可读性或只是看起来完全错综复杂 - 但您可以覆盖基类并包含“named”列的配置。
我假设当你说,“不修改构造函数中的配置”你指的是实现列的网格,而不是可以在其他地方整理掉的类似逻辑。 / p>
Ext.define('App.override.grid.column.Column', {
override: 'Ext.grid.column.Column',
config: {
name: null
},
statics: {
namedColumns: {
reusable1: { /* ... */ },
reusable2: { /* ... */ },
// ...
}
},
constructor: function(args){
var _args = args || {},
statics = Ext.grid.column.Column,
defaults = statics.namedColumns[_args.name] || {};
this.callParent([Ext.apply({}, _args, defaults)]);
}
});
的用法强>
Ext.define('App.view.Grid', {
columns: [
{ text: 'inline column1' },
{ name: 'reusable1' },
{ name: 'reusable2' },
{ text: 'inline column2' },
]
});
<强>优点强>
{ name: 'reusable', flex: 2 /* superseding value */ }
<强>缺点强>
xtype
不能用作默认配置的一部分,这仍然需要内联指定除常规网格列以外的任何内容。 { xtype: 'datecolumn', name: 'some-defaults' }
答案 1 :(得分:0)
看看这些配置:
defaults
配置适用于整个容器,其中columns
有自己的默认选项。
希望这有帮助!