ExtJs 3.4 TreeNode的eachChild方法 使用实例
下面的实例,用于每次加载树,树节点重新生成,虽然选中节点path相同但是当执行修改/删除时,树重新加载,之前选中的树节点已经不能能使用expandPath或者getNodeById获取:
思路在于,依次遍历子节点,递归调用:需要注意的是,只有展开expanded==true的节点,childNodes属性才有值.hasChildNodes()方法只是依据树节点+来进行判断.
function getNode(query_panel, tree, nodeId, nodePath, expand, select, rootNode) {
if (rootNode.hasChildNodes()) {
if (nodePath.startsWith(rootNode.getPath())) {
rootNode.expanded ? null : rootNode.expand();//关键这一句,不然无法获取子节点,虽然hasChildNodes()返回true
rootNode.eachChild(function (r) {
if (r.id == nodeId) {
expand ? (r.hasChildNodes() ? r.expand() : null) : null;
select ? (r.isSelected() ? null : r.select()) : null;
if (query_panel && query_panel.setCurNode && typeof (query_panel.setCurNode) == 'function') {
query_panel.setCurNode(r);
}
return false;
}
else {
if (nodePath.startsWith(r.getPath())) {
return getNode(query_panel, tree, nodeId, nodePath, expand, select, r);
}
}
});
}
}
}
其中query_panel关键在于
query_panel.setCurNode
存放已找到的node节点;
nodeId/nodePath:树重新加载之前选中的节点;
expand/select:新节点的状态,是否展开/是否选中;
rootNode:树的根节点