我有一个json,有3个主要的menupoints。在第一个menupoint,有一个子菜单,所以menupoint 1不是'叶子'。当我单击文件夹符号时,整个菜单(整个json文件)再次位于子菜单下。所以它的无限。请有人帮我这个吗?谢谢!!
以下是我的文件:
应用/数据/ tree.json
{
'result':
[
{
"text": "Point1",
'children':[
{
"text": "SubPoint1",
'leaf':true
},
]
},
{ "text": "Point2",
'leaf':true
},
{
"text": "Point3",
'leaf':true
},
]
}
查看/ TreeMenu.js
Ext.define('App.view.TreeMenu', {
extend: 'Ext.tree.Panel',
alias: 'widget.treemenu',
title:'Title',
store: 'TreeMenu'
});
商品/ TreeMenu.js
Ext.define('App.store.TreeMenu', {
extend: 'Ext.data.TreeStore',
requires: 'App.model.TreeMenu',
model: 'App.model.TreeMenu',
proxy: {
type: 'ajax',
url: 'app/data/tree.json',
reader: {
type: 'json',
root: 'result'
}
}
});
模型/ TreeMenu.js
Ext.define('App.model.TreeMenu', {
extend: 'Ext.data.Model',
fields: [
{ name: 'name', type: 'int', leaf:false, text:'name'},
{ name: 'value', type: 'string', leaf:false, text:'value'},
]
});
控制器/ TreeMenu.js
Ext.define('App.controller.TreeMenu', {
extend: 'Ext.app.Controller',
views: ['TreeMenu'],
models: ['TreeMenu'],
stores: ['TreeMenu'],
onLaunch: function() {
var treeStore = this.getTreeMenuStore();
treeStore.load({
//callback: this.onStationsLoad,
scope: this
});
},
refs: [{
selector: 'tree',
ref: 'treemenu'
}],
init: function() {
this.control({
'treemenu': {
itemclick : this.treeItemClick
}
});
},
treeItemClick : function(view, record) {
console.log(record);
}
});
答案 0 :(得分:2)
我花了一段时间才意识到,但你的树实际上正在按设计工作:)
我创建了一个可视化的小提琴:http://jsfiddle.net/dbrin/auBTH/
基本上每次在tree
中展开节点时,默认行为都是加载该节点的子节点。这意味着store
将向proxy
url属性指定的服务器发送GET请求。它发送您单击的节点的id以进行扩展,以便服务器端使用该id运行查询。
正如您所说,您总是返回相同的数据集,这正是您所看到的:每次展开树节点时,相同的数据集将作为展开节点的子节点附加到树中。您返回的其中一个节点是可扩展的...因此您可以再次重复该过程:)
编辑:进一步想到我发现了一个单独的问题,使得节点在服务器上查找子节点而不是下面已经获取的子节点。问题在于如何定义读者。在原始代码中,您将json reader设置为解析从服务器返回的数据,并指定root
属性设置为结果。
虽然这适用于初始加载数据,但它也会影响子节点的读取方式。基本上root
配置会覆盖默认的子级配置。我更正了上一个示例,将root
属性更改为 children - http://jsfiddle.net/dbrin/auBTH/4/现在它按预期工作。
答案 1 :(得分:0)
Json树的任何孩子都有" leaf:true" ?
也许是问题......
- 编辑:
我看到你有叶子值。
也许可以这样:
'children':[
{
"text": "SubPoint1",
'leaf':true
}-->, <------------------------- ERASE final comma.
]
答案 2 :(得分:0)
我可以证实它有帮助。诀窍是json格式
var data = {
"result": [{
"text": "Point1",
"children": [{
问题是节点数组首先在“结果”下,然后在“子”下。这些必须相同,并在代理
中的根配置中使用 var data = {
"result": [{
"text": "Point1",
"result": [{
root: 'result'
米甲