在做项目的时候要用到树的级联选择,在我的影响中貌似ExtJs 2.2没有自带的级联选择。然后就有了下面的代码:
tree.on('checkchange',function(node,checked){
selParent(node,checked);
selChild(node,checked);
},tree);
//这个方法是选择父节点,自动选中所有的子节点
function selParent(node,checked){
if (node.hasChildNodes()) {
node.eachChild(function(child) {
child.attributes.checked = checked;
var cb = child.ui.checkbox;
if (cb){
cb.checked = checked;
selParent(child, checked);
}
});
}
}
//这个方法是选择子节点,自动选中父节点的父节点
function selChild(node, checked){
if(checked){
var parentNode = node.parentNode;
if(parentNode != undefined){
parentNode.attributes.checked = checked;
var cb = parentNode.ui.checkbox;
if(cb){
cb.checked = checked;
selChild(parentNode, checked);
}
}
}else{
var flag = false;
if(node == null){
return;
}
var parentNode = node.parentNode;
if(parentNode != undefined){
if(parentNode.hasChildNodes()){
parentNode.eachChild(function(child){
var cd = child.attributes.checked;
if(cd == true){
flag = true;
}
});
}
}
if(!flag){
parentNode.attributes.checked = checked;
var cb = parentNode.ui.checkbox;
if(cb){
cb.checked = checked;
selChild(parentNode, checked);
}
}
}
}