我有以下两个扩展ExtJs Grid面板的类:
现在我想提供一个新类,它将根据开发人员在网格JSON配置中设置的属性扩展上述两个类之一
例如:
Java:
parentObj.put("gridType", "readonly");
JS:
Ext.define('Grid.view.GridFactory', {
extend: 'Grid.view.AbstractGridFactory',
alias: 'widget.gridfactory',
singleton: true,
create : function(model){
var grid;
switch(model.input.gridType)
{
case 'readonly':
grid = new Grid class extending the ReadonlyDataGrid class;
break;
case 'editable':
grid = new Grid class extending the EditableDataGrid class;
break;
}
return grid;
}
});
现在我必须创建两个单独的类文件来处理这个问题。
第1课:
Ext.define('Grid.view.EditableGrid',{
extend : 'Grid.view.EditableDataGrid',
.... //additional features
});
第2课:
Ext.define('Grid.view.ReadonlyGrid',{
extend : 'Grid.view.ReadOnlyDataGrid',
.... //additional features
});
答案 0 :(得分:1)
extend
属性:Ext.define('Grid.view.RuntimeGrid',{
extend: 'Grid.view.' + (model.input.gridType === 'readonly' ? 'ReadonlyDataGrid' : 'EditableDataGrid'),
//additional features
});
但这是不好的做法。
在运行时更改superClass更糟糕。 Designwise,有两个看似明显的选择:
editable
,并且仅在选项为true
时才会实例化相关的编辑插件/编辑器。