我希望有人可以指导我如何处理这个json数据结构。
以下是一个例子:(我无法控制这些数据)
{
"1": {
"name": "thing 01",
"attributes": {
"color": "red",
"brand": "ACME"
}
},
"2": {
"name": "thing 02",
"attributes": {
"color": "blue",
"brand": "ACME"
}
}
}
所以我对如何使用reader
Ext.define('MyApp.model.Thing', {
extend: 'Ext.data.Model'
fields: [
{ name: 'name' },
{ name: 'attributes', type: 'auto' }
],
proxy: {
type: 'rest',
url: 'http://example.com/api/things',
reader: {
type: 'json',
rootProperty: ??? // <--- How should this work?
}
}
});
我想知道是否有办法做某事......
rootProperty: '[id]'
还有一种方法可以在数据对象时指定ID吗?也许以某种方式在模型上使用idProperty
配置?
我应该使用reader.format方法吗?这看起来有点粗......
任何想法都是贬义的。谢谢!
答案 0 :(得分:5)
编写自定义阅读器类:
Ext.define('MyReader', {
extend: 'Ext.data.reader.Json',
alias: 'reader.myreader',
config: {
transform: function (data) {
var ret = [],
key, o;
for (key in data) {
o = data[key];
o.id = key;
ret.push(o);
}
return ret;
}
}
});
Ext.define('Thing', {
extend: 'Ext.data.Model',
fields: ['name', 'attribute'],
proxy: {
type: 'ajax',
url: 'data1.json',
reader: {
type: 'myreader'
}
}
});
示例fiddle。
答案 1 :(得分:2)
您的确切问题已经回答here。
您应该实现自定义阅读器并覆盖getResponseData
方法。
Ext.define('MyReader', {
extend: 'Ext.data.reader.Json',
alias: 'reader.myreader',
getResponseData: function(response) {
var data = this.callParent([response]);
//do stuff here
return data;
}
});