2013-03-04 66 views
1

我有這樣的ExtJS的模型:陣列數據作爲ExtJS的模型屬性的

Ext.define('Game', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { name: 'id', type: 'int' }, 
     { name: 'Name', type: 'string' }, 
     //{ name: 'levels' , type:'array'}, 
    ] 
}); 

我想用這個模型網格存儲,但它的第三個屬性

// {name:'levels',type:'array'}

是一個數據的數組,我想在我的網格的動態創建的列中顯示它們。 我想,也許在ExtJS的模型關聯可能會帶來我一個解決方案,但我很困惑,如何使用them.any解決方案將appriciated。

+0

您可以創建自己的['Ext.data.Types'(http://docs.sencha.com/ext-js/4-1/#!/api/Ext.data.Types)和轉換您的自定義數據。 – A1rPun 2013-03-04 12:23:19

+1

您需要詳細說明您的問題;存儲在這個數組中的內容是什麼以及如何將其顯示在網格中? – sra 2013-03-04 13:00:11

回答

9

只需使用類型:「自動」設置,您的陣列將保持不變。

Ext.define('Game', { 
    extend: 'Ext.data.Model', 
    fields: [ 
     { name: 'id', type: 'int' }, 
     { name: 'Name', type: 'string' }, 
     { name: 'levels' , type:'auto'}, 
    ] 
}); 

然後你可以用渲染器定義列像這樣:

columns: [ 
    { 
     text: "ID", 
     dataIndex: "id" 
    }, 
    { 
     text: "Name", 
     dataIndex: "Name" 
    }, 
    { 
     text: "Array Item 1", 
     dataIndex: "levels", 
     renderer: function(value){ 
      return levels[0]; 
     } 
    }, 
    { 
     text: "Array Item 2", 
     dataIndex: "levels", 
     renderer: function(value){ 
      return levels[1]; 
     } 
    } 
] 

如果你想通過數組中的項動態添加列,你實際上必須弄清楚哪些記錄有陣列中有最多的項目,然後根據你需要的列數組,然後用.configure方法設置網格的列添加儘可能多的列。這可能可以在商店的加載事件中完成。

+1

只是FYI,所有未知的類型被設置爲自動;) – sra 2013-03-05 06:52:41

+1

只是想在代碼中明確... – Reimius 2013-07-16 17:08:49

+0

作爲一個方面說明,如果你有一個數組在不同記錄之間具有可變長度,這是一個好主意來檢查是否該對象未定義或不首先爲了避免錯誤。從未來該解決方案 謝謝! – 2015-01-22 16:21:34

0

假如這是你的模型中的數據 -

{ 
    "id": 1, 
    "name": "game", 
    "levels": ["level 1", "level 2", "level 3"] 
} 

您可以隨時定義你的模型

Ext.define('Game', { 
    extend: 'Ext.data.Model', 
    requires: [ 
     'Ext.data.field.Integer', 
     'Ext.data.field.String' 
    ], 
    fields: [ 
     { 
      name: 'id', type: 'int' 
     }, 
     { 
      name: 'Name', type: 'string' 
     }, 
     { 
      name: 'levels' 
     } 
    ] 
}); 

離開類型空將被解釋爲「自動」,因此沒有轉換將應用於該領域。

PS:當心尾隨逗號。 :)