Ext 中 treePanel节点自动全部展开问题;
functionexpandNodeAll(rootNode){rootNode.expand(true);alert('haha');varchilds=rootNod...
function expandNodeAll (rootNode) {
rootNode.expand(true);
alert('haha');
var childs = rootNode.childNodes;
for (var i = 0; i < childs.length; i++) {
expandNodeAll(childs[i);
}
}
这是我写的方法,但是我发现是先执行的alert才执行的节点展开,这样的话就没有办法获取子节点了,所以 childs .length=0 所以就不能循环展开了,搞不懂为什么我先写的是展开在alert可是偏偏反过来执行?如何才能实现treePanel中所有节点都自动展开的功能?请告诉赐教~~~ 展开
rootNode.expand(true);
alert('haha');
var childs = rootNode.childNodes;
for (var i = 0; i < childs.length; i++) {
expandNodeAll(childs[i);
}
}
这是我写的方法,但是我发现是先执行的alert才执行的节点展开,这样的话就没有办法获取子节点了,所以 childs .length=0 所以就不能循环展开了,搞不懂为什么我先写的是展开在alert可是偏偏反过来执行?如何才能实现treePanel中所有节点都自动展开的功能?请告诉赐教~~~ 展开
2个回答
展开全部
对于ext来说最好的方式是不要一下将所有的节点全部展开,因为这样的话当数据量大的时候,后台读取所有节点的数据,并且拼装tree节点的速度比较慢,而且渲染也比较慢,经常在默认时间内无法渲染出你从后台读取的数据,所以建议点击一个节点的时候在进行ajax的异步加载。
相关代码:
//点击节点触发
tree.on("click", function(node, event) {
// 判断当前节点是否为第一级子节点
if (node.id != 0) {
if(node.parentNode.id==0){
formPanel.findById('checkBtn').enable();
}else{
formPanel.findById('checkBtn').disable();
}
var fatherText = node.parentNode.text;
if(fatherText!=null){
formPanel.findById('supercatName').setValue(fatherText);
}else{
formPanel.findById('supercatName').setValue('公开分类');
}
formPanel.findById('catIsroot').setValue(node.id);
setdate(formPanel, node.id,node)
} else {
formPanel.findById('checkBtn').enable();
formPanel.findById('catIsroot').setValue('1');
Ext.getCmp('catName').setValue('');
Ext.getCmp('catUnitidname').setValue('');
Ext.Msg.alert('提示', '请选择具体类别');
}
});
//首节点
rootNode = new Ext.tree.AsyncTreeNode({
id : "0",
text : "公开类别"
});
tree = new Ext.tree.TreePanel({
root : rootNode,
frame : true,
animate : true, // 开启动画效果
enableDD : false, // 不允许子节点拖动
border : true, // 没有边框
singleClickExpand : true,
autoScroll : true,
tbar : tbar,
height : document.body.clientHeight,
height : document.body.clientHeight,
loader : new Ext.tree.TreeLoader({
dataUrl : REQUEST_URL,
baseParams : {
method : 'getOpenBasicTree'
}
})
});
// 默认展开第一层
rootNode.expand(false, true);
然后将tree放到一个panel里面就行了
相关代码:
//点击节点触发
tree.on("click", function(node, event) {
// 判断当前节点是否为第一级子节点
if (node.id != 0) {
if(node.parentNode.id==0){
formPanel.findById('checkBtn').enable();
}else{
formPanel.findById('checkBtn').disable();
}
var fatherText = node.parentNode.text;
if(fatherText!=null){
formPanel.findById('supercatName').setValue(fatherText);
}else{
formPanel.findById('supercatName').setValue('公开分类');
}
formPanel.findById('catIsroot').setValue(node.id);
setdate(formPanel, node.id,node)
} else {
formPanel.findById('checkBtn').enable();
formPanel.findById('catIsroot').setValue('1');
Ext.getCmp('catName').setValue('');
Ext.getCmp('catUnitidname').setValue('');
Ext.Msg.alert('提示', '请选择具体类别');
}
});
//首节点
rootNode = new Ext.tree.AsyncTreeNode({
id : "0",
text : "公开类别"
});
tree = new Ext.tree.TreePanel({
root : rootNode,
frame : true,
animate : true, // 开启动画效果
enableDD : false, // 不允许子节点拖动
border : true, // 没有边框
singleClickExpand : true,
autoScroll : true,
tbar : tbar,
height : document.body.clientHeight,
height : document.body.clientHeight,
loader : new Ext.tree.TreeLoader({
dataUrl : REQUEST_URL,
baseParams : {
method : 'getOpenBasicTree'
}
})
});
// 默认展开第一层
rootNode.expand(false, true);
然后将tree放到一个panel里面就行了
追问
额 ,问题解决了 ,不过还是谢谢你了~~~
追答
采纳最佳 帅哥
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询