ztree异步加载 多个节点check ajax问题

AndrewLu 发布于 2014/05/13 21:00
阅读 763
收藏 0

@zTree 你好,想跟你请教个问题:

在项目中使用到了ztree,在加载默认选中机构节点的时候需要从数据库循环出所有机构id,通过机构id找到机构id路径

比如机构A的id 为4机构A的idPath 为 /root/1/2/3/4

然后通过zTree4OrgOnAsyncSuccess方法递归expand节点1、2、3,然后通过判断选中节点4

现在碰到的问题时,如果有多个机构id需要循环,由于ajax调用的无序性,当A节点的父节点都展开的时候,回调函数zTree4OrgOnAsyncSuccess可能会调用B机构节点,然后导致在firefox中只选中最后一个机构节点

代码如下:

var orgIdArri = ceOrgIds.split(',');
                $.each(orgIdArri,function (i,item){
                    expandOrgTreeByOrgId(i,item);
});


function expandOrgTreeByOrgId(id){
    $.ajax({
        url : adminPluginPath + "/basic/org/detail.json",
        data : {id:id},
        async:false,
        success : function (rtn) {
            orgIdPathArr = rtn.idPath.split("/");
            var treeObj = $.fn.zTree.getZTreeObj("departmentTree");
            if(orgIdPathArr.length<=3){
                var pNodee = treeObj.getNodeByParam("id", orgIdPathArr[2], null);
                treeObj.checkNode(pNodee,true,true);
            }else{
                var rootNode = treeObj.getNodeByParam("id", orgIdPathArr[2], null);
                treeObj.expandNode(rootNode, true, true, true,true);
            }
        }
    });
}

function zTree4OrgOnAsyncSuccess(event, treeId, treeNode, msg){
    var treeObj = $.fn.zTree.getZTreeObj(treeId);
    try{
        $.each(orgIdPathArr,function(i,item){
            if(treeNode.id == item && i < orgIdPathArr.length - 1){
                var pNode = treeObj.getNodeByParam("id", orgIdPathArr[i+1], treeNode);
                console.log(pNode);
                if(pNode != null){
                    treeObj.expandNode(pNode, true, true, true,true);
                }
            }
            if(i == orgIdPathArr.length - 1 ){
                var pNodee = treeObj.getNodeByParam("id", orgIdPathArr[orgIdPathArr.length - 1], null);
                if(pNodee!=null){
                    treeObj.checkNode(pNodee,true,true);
                }
            }
        });    
    }catch(e){
    }
}


加载中
0
zTree
zTree
ajax 是异步的,肯定是无序, 但 onAsyncSuccess 回调的时候会返回当前这个ajax 是哪个父节点加载的子节点数据。。。利用这个数据你就可以只针对你需要的父节点操作即可
返回顶部
顶部