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的功能
图示: