Extjs4中tree元件子節點和父節點的級聯操作
阿新 • • 發佈:2019-02-04
方式一:
checkchange:function(node,checked,options){ //遍歷孩子,遞迴實現找到所有孩子節點 var allChild=function(node,flag){ node.eachChild(function(n){ n.data.checked = flag; n.updateInfo({checked:flag}); if(n.hasChildNodes())//胖墩是否有子節點 { n.expand(); allChild(n,flag); } }); }; //遞迴實現找到所有父親節點,並改為選中狀態 var allParent=function(node,flag) { node.data.checked=flag; node.updateInfo({checked:flag}); if(node.parentNode!=null) { allParent(node.parentNode,flag); } }; //遞迴實現找到所有父親節點,並改為未選中狀態 var allParentUnchecked=function(node,flag){ var i=0; node.eachChild(function(n){ if(n.data.checked) { i=1; } }); if(i==0) { node.data.checked=flag; node.updateInfo({checked:flag}); } if(node.parentNode!=null) { allParentUnchecked(node.parentNode,flag); } }; if(node.data.leaf == false){//如果不是葉子節點 if(checked){ //開啟節點 node.expand(); allChild(node,true); if(node.parentNode!=null) { allParentUnchecked(node.parentNode,true); } }else{ node.expand(); allChild(node,false); } }else{ //是葉子節點 if(checked){//如果選中 allParent(node.parentNode,true); } else { allParentUnchecked(node.parentNode,false); } } } }
方式二:
checkchange:function(node,checked,eOpts){ node.expand(true); //遞迴選中父節點 var eachParent = function(node,checked){ if(!node.isRoot() && checked == true){ if(!Ext.isEmpty(node.get('checked'))){ node.set('checked',checked); node.commit(); } eachParent(node.parentNode,checked); } else if(!node.isRoot()) { if(!Ext.isEmpty(node.get('checked'))){ var flag=false; node.eachChild(function(n){ if(n.get("checked")){ flag=true; } }); if(!flag){ node.set('checked',checked); node.commit(); eachParent(node.parentNode,checked); } } } }; eachParent(node.parentNode,checked); //遞迴選中孩子節點 var eachChild = function(node,checked){ node.eachChild(function(n){ if(!Ext.isEmpty(n.get('checked'))){ n.set('checked',checked); n.commit(); } eachChild(n,checked); }); }; eachChild(node,checked); }