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 }  

 

posted on 2014-04-02 14:38  看天空的星星  阅读(300)  评论(0编辑  收藏  举报

导航