ztree异步加载 多个节点check ajax问题
@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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
ajax 是异步的,肯定是无序, 但 onAsyncSuccess 回调的时候会返回当前这个ajax 是哪个父节点加载的子节点数据。。。利用这个数据你就可以只针对你需要的父节点操作即可