一个带有checkcox的ext tree的问题,跪求高人给个思想!

来源:百度知道 编辑:UC知道 时间:2024/06/04 02:51:12
给带有checkcox的加了一个选中枝节点下面所有的子结点全选中的功能,现在我给它加一个确认功能,点击的时候弹出提示框,选择是否选中其子结点,但是我这样写了以后,选择的这个父节点每有一个枝节点他就弹出一次框,谁有好的思路帮个忙说一下,谢谢!

tree.on('checkchange', function(node, checked) {
if(node.attributes.cls=="file"){ //叶子节点不弹框
return;
}
Ext.Msg.confirm('提示','是否全选/反选其叶节点',function(btn,text){

if(btn == 'yes'){
node.expand();
node.attributes.checked = checked;
node.eachChild(function(child) {
child.ui.toggleCheck(checked);
child.attributes.checked = checked;
child.fireEvent('checkchange', child, checked); //问题就在这里,递归自己的时候每有一个枝节点就递归一次,弹出一次提示框
});
}else{
return;
}
});
}, tree);

原因在于 你注册了 'checkchange'事件 后所有的节点变化都会执行这段代码,但实际上你代码里面已经实现了递归去改变子节点了。你希望是执行一次。
其实可以不这么写递归的。
但你已经弄了这个 改动最小的改法是2个 1,第一个节点响应'checkchange'时间后,先remove掉所有响应事件,然后执行你的递归方法进行勾选就行了。退出递归时 将事件还原。
第二个 是加一个全局部变量 每次进入方法时先判断该变量。第一次进入后修改变量值 第二次就去后就不执行后面的代码了