layer.conifrm 非阻塞执行 ztree删除节点 问题

layer.confirm无法阻塞js执行,导致ztree插件的beforeRemove回调函数未等待用户确定删除便已经移除界面中的节点, 因此可能会出现前后台数据不一致情况,正常逻辑理应删除后台数据然后移除界面中的ztree节点元素。

解决方案:不使用ztree提供的默认删除功能(beforeRemove函数返回false即可),在layer.confirm中手动调用removeNode方法实现前台与后台的数据同步删除(舍弃ztree提供的自动删除功能)。代码如下:

//beforeRemove回调函数
function zTreeBeforeRemove(treeId, treeNode) {
var zTree = $.fn.zTree.getZTreeObj("zTree");
layer.confirm("确认删除节点 -> " + treeNode.name + " 吗?", {btn: ['确定', '取消']},
function (index) {//确定
$.ajax({
url: url,
data: {"id": treeNode.id},
type: "POST",
async: false,
success: function (data) {
if (!data) {
layer.alert("该接口已经被申请!");
} else {
//手动移除节点
zTree.removeNode(treeNode);
layer.alert("删除成功!");
}
},
error: function () {
layer.alert("删除失败!");
}
});
},
function (index) {//取消
layer.close(index);
});
//注意:返回false便不会触发onRemove事件
return false;
}

 

参考文献:https://blog.csdn.net/yqwayward/article/details/78312424
---------------------
作者:LYM0721
来源:CSDN
原文:https://blog.csdn.net/LYM0721/article/details/82183580?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

posted @ 2018-10-16 09:49  LGGGGG  阅读(576)  评论(0编辑  收藏  举报