ExtJs 3.4 eachChild 使用实例

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:树的根节点

 

你可能感兴趣的:(extjs,extjs,treepanel,treenode,eachNode)