具有重复结构的ExtJS模型

时间:2014-01-21 21:43:09

标签: extjs

在映射具有少量重复结构的模型时,哪些模式已成功。 我必须建模并创建一个网格视图,其中有一些列基本上是相同的重复结构。

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'关联类型?

2 个答案:

答案 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读取。