第一次加载树的时候,root节点下的子节点,
能够通过执行action返回json获得并显示 ,
但是,在点击节点的时候,虽然触发了事件,
但是不执行action了.前后台没报任何错...
源码如下:
Ext.onReady(function(){
//Ext.BLANK_IMAGE_URL="ext/resources/images/default/s.gif";
var Tree = Ext.tree;
var loader=new Tree.TreeLoader({dataUrl:'createTree.do?method=CreateTree'});
var root = new Tree.AsyncTreeNode({
text: '看看',
draggable:false,
id:'1'
});
var tree = new Tree.TreePanel({
el:'tree-div',
lines:true,
rootVisible:true,//根节点是否可见
useArrows:true,//小箭头
autoHeight:true,
split:true,
autoScroll:true,
animate : false,//动画效果
enableDD:true,//允许拖拽
border : false,
containerScroll: true,
loader: loader
});
tree.on('beforeload', function(node){ //单击节点加载该节点的子节点
*** //alert("node.id-->"+node.id); //事件是能进入的,我测试了
*** tree.loader.dataUrl = 'createTree.do?method=CreateTree&id'='+node.id;
});
// 设置根节点
tree.setRootNode(root);
tree.render();
});
贴一下第一次返回的数据。
看看是否有包含children这个属性.如果有的话,去掉它
我用LZ的代码是可以的,估计你返回的json有问题。
难道tree.loader.dataUrl = 'createTree.do?method=CreateTree&id'='+node.id; 的id后多了个'???
可以参考我写的调用方式:
[code="java"]
/**
var treeLoad = new Ext.tree.TreeLoader({
url : "createTree.do",
requestMethod : 'POST',
baseParams:{method:'CreateTree',id:node.id}
});
treeLoad .on('beforeload', function(treeLoader, node) {
var id = node.attributes.id;
var para = {id:id};
Ext.apply(treeLoader.baseParams , para);
if( treeLoader.baseParams == null ){
treeLoader.baseParams = para;
}
treeLoader.url = node.attributes.url;
return true;
}, treeData);
//----------------------------------------------------
var treeLoad = treePanel.getLoader();
treeLoad.baseParams = params;
treeLoad.load(root, function(){});//重新加载数据
this.expandAll();
},[/code]
从后台返回的json必需是这种格式:
1、有id
2、有text
3、必需是集合
例:
[{id:'001',text:'我的第一个节点',children:[{id:'001-01',text:'儿子节点'}] }]
最后你的语法有错:
我明白你现在遇到的问题:
你遇到的问题,我估计是,点击子节点时无法触发“请求--load()”方法。
提供2解决方案给你。
1.在onclick事件里,获取点击的节点,
调用 load()方法请求数据。
2.异步加载,节点的lear属性必需为false,即它不是叶子节点,当点击时,EXT会自动触发load()方法。
无论你是使用 1或2.
都必需写'beforeload'事件,它的作用是将,当前点击的节点的属性:url刷新给即将要请求到后台的请求路径。
这个url节点属性,可在后台json构建时制定,这样每一个节点都能到不同的action去请求数据。
这才是真正的异步。
treeLoad .on('beforeload', function(treeLoader, node) {
.......
.......
treeLoader.url = node.attributes.url;
.......
.......
}, treeData);
你只是指定了加载数据URL,并没有加载。需要调用一下load方法。
tree.on('beforeload', function(node){
tree.loader.dataUrl = 'createTree.do?method=CreateTree&id'='+node.id;
[color=red]tree.loader.load(node);[/color]
});
[code="java"]
[{"text":"看看","parentId":"{9207F055-98C4-8E45-8E77-6503753FA824}","mobile":"","href":"","cls":"folder","leaf":false,"checked":false,"id":"{3820E7D3-9529-3C48-9CD9-D2360A2B367F}","children":[]},
{"text":"区委各部、群众团体","parentId":"{9207F055-98C4-8E45-8E77-6503753FA824}","mobile":"","href":"","cls":"folder","leaf":false,"checked":false,"id":"{8CA7BC78-4D3C-514A-A3ED-448BA12B66AC}","children":[]},………………]
把这里面的"children":[]去掉就行啦
[/code]