2014-01-21 47 views
1

使用少量重複結構映射模型時,哪些模式已成功。 我必須建模和創建一個網格視圖與具有幾個列基本上是相同的重複結構的記錄。帶重複結構的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'關聯類型?

回答

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

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轉換爲convert函數,因此在使用與B_derived相同的機制時出現問題。骯髒的黑客可能會將defaultValue設置爲B並將該字段綁定到空數據。然後v將從defaultValue讀取。

+0

這非常接近我的想法,並結合將所有A_ *數據聚合到一個字段中,將所有B_ *數據聚合到另一個字段中。由於A_ *數據和B_ *數據具有相同的一組字段,因此我希望他們可以使用另一個模型作爲字段的類型。我會更新這個問題來澄清這一點。 – gbegley