Ext TreePanelrcheckbox级联选择的实现(自己修改)
监听方法checkchange:
1 listeners:{ 2 'checkchange': Ext.bind(this.checkChange,this) 3 }
主要代码
1 function cascadeCheck(node,checked){ 2 //调用函数改变子孙节点的状态 3 changeChildrenStatus(node,checked); 4 5 //调用函数改变祖先节点的状态 6 changeParentStatus(node,checked); 7 } 8 //函数: 改变改变子孙节点的状态 9 function changeChildrenStatus(node,checked){ 10 if(node.hasChildNodes()){ 11 node.eachChild(function(child){ 12 changeChildrenStatus(child,checked); 13 }); 14 } 15 node.set('checked', checked); 16 } 17 18 //函数: 改变祖先节点的状态 19 function changeParentStatus(node,checked){ 20 var parent=node.parentNode; 21 if(!parent){ 22 return ; 23 } 24 25 var isParentChecked = false; 26 var siblings=getSiblings(node); //获取兄弟节点 27 for(var i=0;i<siblings.length;i++){ 28 var brotherNodeChecked = siblings[i].get('checked'); 29 if(brotherNodeChecked){ 30 isParentChecked = brotherNodeChecked; 31 } 32 } 33 parent.set('checked', isParentChecked); 34 changeParentStatus(parent, checked); 35 } 36 37 //函数:得到节点的兄弟节点 38 function getSiblings(node){ 39 var siblings=[]; 40 var parent=node.parentNode; 41 if(parent){ 42 parent.eachChild(function(sibling){ 43 siblings.push(sibling); 44 }); 45 } 46 return siblings; 47 }