ExtJS Tree刷新后只选择节点,不展开(二)
实例讲解:点击触发域(Ext.form.TriggerField)三角按钮,弹出树面板窗口,并将触发域中的内容在树面板中选中。
1.点击触发域获取触发域中的内容:
policyTg.onTriggerClick=policytrigFun; function policytrigFun(e){ policyWin.show();//注:窗口显示的时候,会去加载树! policys = policyTg.getValue();//获取触发域中的文字内容 var parentNodes = policy_root.childNodes;//根节点下的目录 if(parentNodes.length > 0) {//因为窗口刚刚展开的时候,树还未加载完,所以length = 0 showCheckedPolicys(parentNodes); } else { loadPolicys(); } }
2.加载树,并执行加载成功事件的方法:
function loadPolicys(){ ploader.on("load",function(treeLoader,node){//此时的node是root根节点——因为是一次性加载完的!!! showCheckedPolicys(node.childNodes); }); }
3.显示被勾选的内容:
/*显示被勾选的内容*/ function showCheckedPolicys(parentNodes){ //先展开再收缩父节点,让子节点充分显示 for (var i = 0; i < parentNodes.length; i++) { parentNodes[i].expand();//将各级进行展开 parentNodes[i].collapse(); } //再将所有节点的选择框给清楚掉 for (var i = 0; i < parentNodes.length; i++) { var childNodes = parentNodes[i].childNodes; for (var j = 0; j < childNodes.length; j++) { childNodes[j].ui.toggleCheck(false); } } //将触发域中获取的相关内容字符串分割为一个数组 var policyArr = policys.split(","); if(!policyArr || policyArr == ""){ return; } //循环对比,相对应的进行勾选 for (var i = 0; i < parentNodes.length; i++) { var childNodes = parentNodes[i].childNodes; for (var j = 0; j < childNodes.length; j++) { var policyText = childNodes[j].text;//将触发域的内容和树节点显示的内容进行对比 for (var k = 0; k < policyArr.length; k++) { if(policyArr[k] == policyText) { childNodes[j].ui.toggleCheck(true); } } } } }
注意:
1.将触发域内容和树节点显示的内容进行对比。
2.注意勾选是TreeNodeUI的功能,不是TreePanel的功能,也不是TreeNode的功能
图示: