带有嵌套 JSON 数组的 ExtJS 中的读取器根 [英] Reader root in ExtJS with nested JSON array
问题描述
我正在尝试用我从 JSON 中获取的部分数据填充网格.例如(shortnen 版本),JSON 看起来像这样:
I'm trying to fill the grid with part of data i'm taking from JSON. For example (shortnen version), JSON looks like this:
{
"data": [
{
"name": "machine1",
"devices": {
"disk": [
{
"type": "file",
"device": "disk",
},
{
"type": "block",
"device": "cdrom",
}
],
},
},
{
"name": "machine2",
"devices": {
"disk": [
{
"type": "file",
"device": "disk",
},
{
"type": "block",
"device": "cdrom",
}
],
},
]
}
要获取有关 machine1
磁盘的信息,我需要访问 data[0].devices.disk
,因此我想更改 store.proxy.reader.root
属性如 root = 'data[0].devices.disk'
或 root = 'data.0.devices.disk'
但两者都是没有用.我知道最简单的方法是更改 JSON 响应,但我对是否能够在不更改 JSON 的情况下填充网格很感兴趣.
To get info about machine1
's disks i need to get to data[0].devices.disk
, so i thought about changing store.proxy.reader.root
property like root = 'data[0].devices.disk'
or root = 'data.0.devices.disk'
but both didn't work.
I know the easiest way is to change the JSON response, but i'm interested if i am able to fill the grid without changing the JSON.
推荐答案
使用 'data[0].devices.disk' 对我有用.您的示例 JSON 虽然带有一些尾随逗号,但有点混乱.
Using 'data[0].devices.disk' worked for me. Your example JSON was a little messed up though with some trailing commas.
Ext.define('User', {
extend: 'Ext.data.Model',
fields: ['type', 'device']
});
Ext.onReady(function() {
var myData = '{"data":[{"name":"machine1","devices":{"disk":[{"type":"file","device":"disk"},{"type":"block","device":"cdrom"}]}},{"name":"machine2","devices":{"disk":[{"type":"file","device":"disk"},{"type":"block","device":"cdrom"}]}}]}';
var store = Ext.create('Ext.data.Store', {
model: 'User',
data: Ext.decode(myData),
proxy: {
type:'memory',
reader: {
type:'json',
root: 'data[0].devices.disk'
}
}
});
Ext.create('Ext.grid.Panel', {
store: store,
stateful: true,
collapsible: true,
multiSelect: true,
stateId: 'stateGrid',
columns: [
{
text : 'type',
dataIndex: 'type'
},
{
text : 'device',
dataIndex: 'device'
}
],
height: 350,
width: 600,
title: 'Array Grid',
renderTo: 'grid',
viewConfig: {
stripeRows: true,
enableTextSelection: true
}
});
});
这篇关于带有嵌套 JSON 数组的 ExtJS 中的读取器根的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!