1

我在 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 模型上的关联可能会给我带来一个解决方案,但我很困惑如何使用它们。任何解决方案都会被应用。

4

2 回答 2

9

只需使用 type: 'auto' 设置,您的阵列将保持不变。

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 方法。这可能在商店的加载事件中完成。

于 2013-03-04T21:12:23.793 回答
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:注意后面的逗号。:)

于 2015-03-06T11:14:53.393 回答