You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ExtJS TreeGrid自定义JSON数据展示异常问题求助

解决ExtJS TreeGrid仅显示根节点且重复生成的问题

嘿,我来帮你排查这个TreeGrid的问题!你遇到的“只显示根节点、点击重复生成”的情况,主要是JSON格式错误加上TreeStore配置没匹配数据结构导致的,咱们一步步来解决:

1. 先修正你的JSON语法错误

你提供的JSON有多处语法问题(比如未闭合的对象、错误的属性写法、多余逗号),这会直接导致ExtJS无法正确解析数据。同时我调整了结构,让它更适配TreeGrid的预期格式:

{
  "grandparent": [
    {
      "name": "grandparent",
      "grandparentid": "11",
      "children": [
        {
          "name": "parent1",
          "children": [
            {
              "name": "parent2",
              "children": [
                {
                  "name": "parent3",
                  "id": "aa",
                  "grandparentid": "11",
                  "children": [
                    {
                      "name": "a: 04"
                    },
                    {
                      "name": "x: asd_123"
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}

2. 匹配TreeStore和TreeGrid的配置

ExtJS TreeGrid默认会识别节点的children字段作为子节点,同时需要明确Model的字段映射:

第一步:定义Model

Ext.define('MyApp.model.TreeNode', {
    extend: 'Ext.data.Model',
    fields: [
        'name', 'id', 'grandparentid'
    ]
});

第二步:配置TreeStore

指定rootProperty为你的根字段grandparent,确保子节点字段对应JSON里的children:

var treeStore = Ext.create('Ext.data.TreeStore', {
    model: 'MyApp.model.TreeNode',
    proxy: {
        type: 'ajax',
        url: '你的JSON数据地址',
        reader: {
            type: 'json',
            rootProperty: 'grandparent' // 对应你的根数组字段
        }
    },
    root: {
        expanded: false // 默认折叠根节点
    }
});

第三步:配置TreeGrid

Ext.create('Ext.tree.Panel', {
    title: '我的树形表格',
    store: treeStore,
    columns: [
        {
            xtype: 'treecolumn', // 树形列
            text: '节点名称',
            dataIndex: 'name',
            flex: 1
        },
        {
            text: 'ID',
            dataIndex: 'id',
            width: 100
        }
    ],
    renderTo: Ext.getBody(),
    height: 400,
    width: 600
});

3. 为什么之前会出现问题?

  • JSON语法错误:未闭合的对象、错误的属性写法会让ExtJS的JSON解析器失败,导致只能加载到根节点,甚至加载失败。
  • 子节点字段不统一:你原来的JSON每层子节点用了不同的键名(比如parent1、parent2),但TreeStore默认只会识别children字段作为子节点,所以无法加载深层节点。
  • 重复生成节点:当点击根节点时,TreeStore会尝试重新加载数据,如果解析逻辑有问题,就会重复创建根节点。

按上面的配置调整后,就能得到你想要的树形结构啦!

内容的提问来源于stack exchange,提问作者NewBie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:03:22