var areaProvinceTree = new Ext.tree.TreePanel({
id : 'areaProvincetree',
width : (mywidth - 200) * 1 / 4 - 2,
height : myheight * 1 / 2,
title : '地域范围',
autoScroll : true,
containerScroll : true,
root : new Ext.tree.AsyncTreeNode({
text : '地域范围',
draggable : false,
isAncestor : true,
checked : false,
id : '-1'
}),
loader : new Ext.tree.TreeLoader({
dataUrl : 'showAreaProvinceTree.action',//返回所有数据
baseParams : {
type : ''
}
})
});
areaProvinceTree.on('checkchange', function(node, checked) {
node.expand();
node.attributes.checked = checked;
node.eachChild(function(child) {
child.ui.toggleCheck(checked);
child.attributes.checked = checked;
child.fireEvent('checkchange', child, checked);
});
}, areaProvinceTree);
areaProvinceTree.on('load', function() {
//tempMsg.areaProvince为dwr返回的放有节点数据的数组
if (tempMsg != null && tempMsg.areaProvince.length > 0) {
for (var i = 0; i < tempMsg.areaProvince.length; i++) {
areaProvinceTree.getNodeById(tempMsg.areaProvince[i].statisticsObjectId).attributes.checked = true;
}
tempMsg.areaProvince = [];
}
});
问题是rootNode.expand();只展开一层,如果我自己写全部展开的话。没展开的节点还是找不到的。
全部展开后的事件,好像又没有吧!?怎么办啊?
[b]问题补充:[/b]
tree的json数据会根据其他控件选择情况返回不同的数据。
grid的行点击事件又会根据dwr返回的数据,将所有返回的节点进行选择。如果在后台直接将json数据封装好的话。后台会特别复杂的。
dwr返回的数据就是节点的id。选择树中id为该数据的节点(也就是打勾)。
说白了,就是需要一个在前台进行树节点选择。
但是要在树数据加载完后,并且全部展开后才进行树节点选择。异步的问题。!!