模型的id只能在extjs4中为int吗?

时间:2013-12-10 12:30:14

标签: extjs

我有一个模型,其id是字符串类型。我加载一个记录以在网格中显示,但id显示为'NaN'。

JSON

{"results":[{"id":"FT01","name":"area1","enable":true}],"total":1,"success":true}

模型

Ext.define('YX.model.Area', {
extend : 'Ext.data.Model',
fields : [
    { name : 'id', type : 'string' },
    { name : 'name', type : 'string' },
    { name : 'enable', type : 'boolean', defaultValue : true }
]
});

存储

Ext.define('YX.store.AreaStore', {
extend : 'YX.store.ListStore',
model : 'YX.model.Area',
proxy : {
    type : 'ajax',
    url : 'area/list.do',
    reader : Utils.ajax.gridReader
}
});
Utils.ajax.gridReader = 
{
    type : 'json',
    root : 'results',
    successProperty : 'success',
    totalProperty : 'total'
}

如果我将proxy.reader设置为直接对象,那么id将在网格中正确显示。

proxy : {
    type : 'ajax',
    url : 'area/list.do',
    reader : {
        type : 'json',
        root : 'results',
        successProperty : 'success',
        totalProperty : 'total'
    }
}

3 个答案:

答案 0 :(得分:2)

这可能取决于您对模型的操作以及支持数据的存储类型。原则上,不应该存在这样的限制,但这可能是对框架(或第三方代码)某些部分的期望。

无论如何,我已经用您的模型和网格编写了一个最小的测试用例,并且正确显示了id字符串。这意味着您的代码中可能存在其他问题......很可能是代理,读者或商店。

这是测试代码(running there):

Ext.define('Area', {
    extend: 'Ext.data.Model',
    fields: [{
        name: 'id',
        type: 'string'
    }, {
        name: 'name',
        type: 'string'
    }, {
        name: 'enable',
        type: 'boolean',
        defaultValue: true
    }]
});

Ext.onReady(function() {
    Ext.widget('grid', {
        renderTo: Ext.getBody(),
        height: 300,
        columns: [
            {dataIndex: 'id', text: "ID"},
            {dataIndex: 'name', text: "Name"}
        ],
        store: {
            model: 'Area',
            proxy: {
                type: 'memory'
                ,data: [
                    {id: 'foo', name: "Foo"}
                    ,{id: 'bar', name: "Bar"}
                ]
            },
            autoLoad: true
        }
    });
});

答案 1 :(得分:1)

此错误是因为您的字段名称为“id”。 default idProperty ='id'字段和idProperty字段必须有int数据。但在你的情况下它不是。 所以这段代码给你这个错误。 如果您不需要idProperty,那么将您的字段名称“id”转换为其他内容

http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.Model-cfg-idProperty

答案 2 :(得分:0)

如果您希望ID为数字,则可以使用identifier自定义ID。
这就是它为我工作的方式。我在模型中添加了以下代码:

identifier: {
        type: 'sequential',
        seed: 10
    },