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

发布于 2021-11-24 18:57:05 字数 3991 浏览 802 评论 1

@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){
    }
}


如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

清欢 2021-11-25 07:46:05

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文