我在加载包含多个嵌套级别的JSON时遇到问题。我有一个模型(位置),它有一组与每个模型相关联的模型(项目)。
项目模型
Ext.define('SenchaSandbox.model.Item', {
extend: 'Ext.data.Model',
requires: ['Ext.data.Field'],
config: {
fields: ['id', 'name']
}
});
位置模型
Ext.define('SenchaSandbox.model.Location', {
extend: 'Ext.data.Model',
requires: ['Ext.data.Field', 'Ext.data.association.HasMany'],
uses: ['SenchaSandbox.model.Item'],
config: {
fields: ['id', 'name'],
associations: [{
type: 'hasMany',
model: 'SenchaSandbox.model.Item',
autoLoad: true,
name: 'items'
}]
}
});
位置商店
Ext.define('SenchaSandbox.store.LocationStore', {
extend: 'Ext.data.Store',
requires: [
'Location',
'Ext.data.proxy.Ajax',
'Ext.data.reader.Json'
],
config: {
model: 'SenchaSandbox.model.Location',
storeId: 'LocationStore',
proxy: {
type: 'ajax',
url: 'DummyGood.json',
reader: {
type: 'json',
rootProperty: 'location'
}
}
}
});
在理想的世界中,如果来自服务器的JSON如下所示,Sencha会自动加载位置及其关联的项目。
好JSON
{"location": [
{
"id": 100,
"name": "Location 1",
"items": [
{
"id": 1,
"name": "Item A"
},
{
"id": 2,
"name": "Item B"
}
]
},
{
"id": 200,
"name": "Location 2",
"items": [
{
"id": 3,
"name": "Item A"
},
{
"id": 4,
"name": "Item C"
}
]
}
]}
但是,服务器实际上返回JSON,其中包含一些类似于下面的嵌套。
错误(服务器)JSON
{"CollectionLocation": {
"collection": [
{
"id": 100,
"name": "Location 1",
"items": {
"collection": [
{
"id": 1,
"name": "Item A"
},
{
"id": 2,
"name": "Item B"
}
]
}
},
{
"id": 200,
"name": "Location 2",
"items": {
"collection": [
{
"id": 3,
"name": "Item A"
},
{
"id": 4,
"name": "Item C"
}
]
}
}
]
}}
假设我无法控制生成此JSON的服务器代码,那么以干净的方式加载此数据有哪些选择?我是否仍然可以利用Sencha的自动加载功能,或者我是否需要自己编写代码来创建子存储并用子模型填充它?
我已经在这里创建了一个小提琴https://fiddle.sencha.com/#fiddle/7n6,以防有人花一分钟时间来处理样本。
答案 0 :(得分:1)
使用Ext.data.TreeStore
代替Ext.data.Store
http://docs-origin.sencha.com/touch/2.3.1/#!/api/Ext.data.TreeStore