我有一个模型,其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'
}
}
答案 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
},