日期:2014-05-16  浏览次数:20385 次

extjs实现tree选中一个节点同时选中父节点和其子节点
现在有多层节点的tree 要实现 选择一个节点 将其父节点选择且将其所有的子节点选择,


但其一的话我现在是实现了 但是就是放在一起同时实现不了 算法太难了 主要是嵌套


选中父节点:

tree.on('checkchange', function(node, flag) {
// 所有父节点选中
  if (node.parentNode.id != 'root') {// 判断是不是root节点
if (flag || tree.getChecked(id, node.parentNode) == "") {// 如果该节点的父节点还有子节点被选者则父节点继续选择
node.parentNode.ui.toggleCheck(flag);
node.parentNode.attributes.checked = flag;
node.parentNode.fireEvent('checkchange', node.parentNode, flag);//递归调用
}
}
});

 选中子节点:

tree.on('checkchange', function(node, flag) {
// 所有子节点选中
if (node.hasChildNodes()) {
node.eachChild(function(child) {
child.ui.toggleCheck(flag);
child.attributes.checked = flag;
child.fireEvent('checkchange', child, flag);//递归调用
});
}

});

 

------解决方案--------------------
tree.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);
});
}, tree);
------解决方案--------------------
JScript code
tree.on('checkchange', function(node, flag) {   
    // 所有父节点选中   
    // Ext.log(node+"======"+node.parentNode);   
    // j=node;   
    if (node.parentNode.id != 'root') {// 判断是不是root节点   
        if (flag || tree.getChecked(id, node.parentNode) == "") {// 如果该节点的父节点还有子节点被选者则父节点继续选择   
            node.parentNode.ui.toggleCheck(flag);   
            node.parentNode.attributes.checked = flag;   
            node.parentNode.fireEvent('checkchange', node.parentNode, flag);//递归调用   
        }   
    }   
});