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
相关产品推荐
相关产品推荐

