带有嵌套 JSON 数组的 ExtJS 中的读取器根 [英] Reader root in ExtJS with nested JSON array

查看:13
本文介绍了带有嵌套 JSON 数组的 ExtJS 中的读取器根的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试用我从 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.

jsFiddle

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆