自动加载多层次嵌套JSON在Sencha Touch
Auto-Loading Multiple Levels of Nested JSON in Sencha Touch
我在加载包含多层嵌套的JSON时遇到了一个问题。我有一个模型(Location),它有一组模型(Items)与每个模型相关联。
<项模型/strong>
Ext.define('SenchaSandbox.model.Item', {
extend: 'Ext.data.Model',
requires: ['Ext.data.Field'],
config: {
fields: ['id', 'name']
}
});
<位置模型/strong>
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,其中包含一些额外的嵌套,如下所示:
Bad (Server) 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的自动加载功能吗?还是我需要自己编写代码来创建子存储并使用子模型填充它?
我在这里创建了一个Fiddle https://fiddle.sencha.com/#fiddle/7n6,以防有人有一分钟的时间来摆弄这个样本。
用Ext.data.TreeStore
代替Ext.data.Store
http://docs-origin.sencha.com/touch/2.3.1/# !/api/Ext.data.TreeStore
相关文章:
- Sencha Touch构建-排除文件
- Sencha Touch和远程服务器上的身份验证
- sencha touch:5个简单的问题
- 从Sencha Touch迁移到EXT JS 6-Contoller的默认/空路由
- 如何在Sencha Touch应用程序中实现自定义Toast
- Sencha Touch使一个简单的按钮工作
- 如何更改Sencha Touch中按钮的尺寸
- 如何提高Sencha Touch 2.x应用程序的性能
- Sencha Touch 2对接选项卡面板
- Sencha Touch 2缩放面板内容
- Sencha Touch使用pageSize配置只加载几行
- 在每个 AJAX 请求(Sencha Touch 2)中发送用户详细信息(会话令牌)
- Sencha Touch 2-选项卡面板中的旋转木马
- Sencha Touch:输入提交表单的键
- Sencha Touch:如何在setData()之后刷新组件的数据
- 我怎么能用“;var=新的外部面板“;并且只有viewport或Ext.define?(sencha touch 2)
- javascript Sencha touch仅在浏览器中不在设备上显示数据
- 在sencha touch中列出掩码
- Sencha Touch下所需字段中星号的行为
- Sencha Touch Store配置属性仅在“__proto__”;