在映射具有少量重复结构的模型时,哪些模式已成功。 我必须建模并创建一个网格视图,其中有一些列基本上是相同的重复结构。
Ext.define('Ep.mm.model.MyComparison', {
var derived = function(val,)
extend: 'Ext.data.Model',
fields : [
{name:'id',type:'string'},
{name:'count',type:'number'},
{name:'special',type:'number'},
{name:'A_a',type:'number'},
{name:'A_b',type:'number'}
{name:'A_derived',renderer = function(val,meta,rec){return rec.get('A_b')-rec.get('A_a')}}
{name:'B_a',type:'number'},
{name:'B_b',type:'number'}
{name:'B_derived',renderer = function(val,meta,rec){return rec.get('B_b')-rec.get('B_a')}}
{name:'C_a',type:'number'},
{name:'C_b',type:'number'}
{name:'C_derived',renderer = function(val,meta,rec){return rec.get('C_b')-rec.get('C_a')}}
]
});
我可能最终得到的服务器型号/商店只有这种结构重复的次数不同(A)(A,B)(A,B,C,D)。有没有办法为A,B,C,D中的每一个使用通用模型,只需重复使用通用模型作为类型。这类似于'嵌套'结构。
Ext.define('MyType',{
extend :'Ext.data.Model',
fields : [
{name : 'a', type:'number'},
{name : 'b', type:'number'},
{ name : 'derived',
convert : function(value, record) {
return record.get('a') - record.get('b');
}
}
]
}
然后MyComparison将被定义为
Ext.define('Ep.mm.model.MyComparison',{
extend : 'Ext'data.Model',
fields : [
{name:'A', type:'MyType'}
{name:'B', type:'MyType'}
{name:'C', type:'MyType'}
]
});
我知道这不太对,但这是我想要创建的功能。 也许使用'hasOne'关联类型?
答案 0 :(得分:1)
是的,您可以扩展自己的模型类:
Ext.define('Base', {
extend: 'Ext.data.Model',
fields: ['name']
});
Ext.define('Child', {
extend: 'Base',
fields: ['age']
});
var o = new Child({
name: 'Foo',
age: 100
});
console.log(rec.get('name'), rec.get('age'));
作为旁注,模型没有渲染器。您可能正在查找字段here上的转换函数。
答案 1 :(得分:0)
我想说你想要一个字段type的功能:
Ext.data.Types.A_DERIVED = {
convert: function(v, data) {
return rec.get('A_b')-rec.get('A_a');
},
type: 'number'
};
然后将其用作A_derived
字段的类型:
Ext.define('Ep.mm.model.MyComparison', {
extend: 'Ext.data.Model',
fields: [
{name:'id',type:'string'},
{name:'A_a',type:'number'},
{name:'A_b',type:'number'},
{name:'A_derived', type: 'Ext.data.Types.A_DERIVED'}
]
});
后记:
- 也许您想将所有A_*
数据汇总到一个字段中?有关示例,请参阅documentation
- 如果要对B_derived
使用相同的机制,则会出现问题,因为无法将B
提供给convert
函数。脏黑客可能是将defaultValue设置为B
并将字段绑定为空数据。然后v
将从defaultValue
读取。