八佾舞于庭 2017-11-21 01:22 采纳率: 0%
浏览 1311
已结题

关于ztree处理异步请求嵌套的问题

求指导! 前端如何解决,求指导,如果处理数据源怎么保持嵌套之前的依赖关系。

  • 写回答

1条回答 默认 最新

  • ℃_0501 2018-06-23 04:11
    关注
    <script type="text/javascript" src="zTreejs/jquery.ztree.core.js"></script>
    <script type="text/javascript" src="zTreejs/jquery.ztree.excheck.js"></script>
    <script type="text/javascript" src="zTreejs/jquery.ztree.exedit.js"></script>
    <SCRIPT type="text/javascript">
        var zNodes;
        var setting = {
            view: {
                addHoverDom: addHoverDom,
                removeHoverDom: removeHoverDom,
                selectedMulti: true
            },
            check: {
                enable: true
            },
            data: {
                simpleData: {
                    enable: true
                }
            },
            edit: {
                enable: true
            },
            callback: {
                onExpand    : zTreeBeforeClick,//点击节点加载子节点
                beforeRemove: beforeRemove,//用于捕获节点被删除之前的事件回调函数,并且根据返回值确定是否允许删除操作
                beforeRename: beforeRename,//用于捕获节点编辑名称结束(Input 失去焦点 或 按下 Enter 键)之后,更新节点名称数据之前的事件回调函数,并且根据返回值确定是否允许更改名称的操作
                beforeDrop  : beforeDrop,
                onDrop      : onDrop
            }
        };
    
        function loadPower(){
            $.ajax({
                type:"post",
                url:"${pageContext.request.contextPath}/itemcat/findTree",
                async:false,
                dataType:"json",
                success:function(data){
                    zNodes=data;
                }
            })
        }
        $(document).ready(function(){
             loadPower();
            /*  $.fn.zTree.init($("#treeDemo"), setting, zNodes);  */
             $.fn.zTree.init($("#treeDemo"), setting, zNodes); 
        });
        /* ztree一级一级加载数据 */
        function zTreeBeforeClick(event, treeId, treeNode) {
            var id=treeNode.id;
            //判断该节点下是否有节点,没有就加载节点
            var treeObj = $.fn.zTree.getZTreeObj(treeId);
            var node = treeObj.getNodeByTId(treeNode.tId);
            if(node.children == null || node.children == "undefined"){  
                $.ajax({  
                      url : "${pageContext.request.contextPath}/itemcat/findTree",  
                      type:'get',//请求方式:get  
                      data: {id:id},
                      dataType : 'json',//数据传输格式:json  
                      error : function() {  
                        $.messager.alert("警告",'亲,请求失败!');  
                      },  
                      success : function(data) { 
                          if(data!=null && data!=""){
                            newNode = treeObj.addNodes(node, data);  
                          }
                      }   
                  });
            };  
        };
        //添加
        var newCount = 1;
        function addHoverDom(treeId, treeNode) {
            var sObj = $("#" + treeNode.tId + "_span");
            if (treeNode.editNameFlag || $("#addBtn_"+treeNode.tId).length>0) return;
            var addStr = "<span class='button add' id='addBtn_" + treeNode.tId
                + "' title='add node' onfocus='this.blur();'></span>";
            sObj.after(addStr);
            var btn = $("#addBtn_"+treeNode.tId);
            if (btn) btn.bind("click", function(){
    
                $.ajax({  
                    type : "POST",    
                    async : false,    
                    url : "${pageContext.request.contextPath}/itemcat/addRootTree",    
                    data :    
                    {    
                        name : "类目" + newCount,  
                        parentId: treeNode.id,
                        sortOrder:treeNode.level+1
                    },  
                    success:function(result){
                        if(""!=result ){                            
                            var zTree = $.fn.zTree.getZTreeObj("treeDemo");  
                            zTree.addNodes(treeNode, {id:result.data.id, pid:treeNode.id, name:"类目" + (newCount)});  
                            return false; 
                        }else{  
                            alert("无法添加新类目,请联系管理员!");  
                        }  
                    }  
                });   
                return false;             
            });  
        };
        function removeHoverDom(treeId, treeNode) {
            $("#addBtn_"+treeNode.tId).unbind().remove();
        };
        var log, className = "dark"; 
    
        //ok 删除
        function beforeRemove(treeId, treeNode) {
            className = (className === "dark" ? "":"dark");     
            var zTree = $.fn.zTree.getZTreeObj("treeDemo");  
            zTree.selectNode(treeNode); 
            var isDel=confirm("确认删除类目 -- " + treeNode.name + " 吗?");
            var isDeled=false;  
            if (isDel) {  
                    $.ajax({  
                    type : "POST",    
                    async : false,    
                    url : "${pageContext.request.contextPath}/itemcat/deleteItemCat",    
                    data :    
                    {    
                        id : treeNode.id    
                    },  
                    success:function(result){  
                        if (result.status==200) {  
                            isDeled= true;  
                        } else {  
                            alert("数据删除失败,请联系管理员!");  
                            isDeled= false;  
                        }  
                    }  
                });   
    
                return isDeled;  
            }else{  
                return false;  
            }  
        }
        //ok 重命名
        function beforeRename(treeId, treeNode, newName, isCancel) {  
            className = (className === "dark" ? "":"dark");  
            if (newName.length == 0) {  
                 alert("节点名称不能为空!");  
                 var zTree = $.fn.zTree.getZTreeObj("treeDemo");  
                 setTimeout(function(){zTree.editName(treeNode)}, 10);  
                 return false;
            }else{
              var isDeled=false;  
              $.ajax({  
                  type : "POST",    
                  async : false,    
                  url : "${pageContext.request.contextPath}/itemcat/editTreeName",    
                  data :    
                  {    
                      id : treeNode.id,  
                      name : newName  
                  },  
                  success:function(result){ 
                      if (result.status == 200) {  
                          isDeled= true;  
                      } else {  
                          alert("重命名失败!请联系管理员");  
                          isDeled= false;  
                      }  
                  }  
              });               
              return isDeled;  
    
            }
        }
        /*设置一个根节点*/
        /* beforeDrop方法:在添加到目标节点下之前,判断目标节点是否存在(这里限制了对于根节点的添加),若存在则判断目标节点下是否已存在相同的节点*/
       function beforeDrop(treeId, treeNodes, targetNode, moveType, isCopy) {  
        //如果有提交到后台的操作,则会先执行if…else…再执行post等提交操作  
        alert(treeNodes[0].id);
        alert(treeNodes[0].level);
        alert(targetNode.id);
        alert(targetNode.level);
        if(targetNode) {
            if(targetNode.id == 1){
                 alert("Error: This name already exists.");
                 return false;
            }
            if(targetNode.children != undefined){  
                //console.log(targetNode.children[0].name)  
                //var nodes = targetNode.children;  
                var name = treeNodes[0].name;  
                for (i = 0; i < targetNode.children.length; i++) {  
                    if(targetNode.children[i].name == name){  
                        alert("Error: This name already exists.");  
                        return false;  
                    }  
                }  
            }  
            return true;  
        }  
        return false;  
    }  
        //拖拽
        function onDrop(event, treeId, treeNodes, targetNode, moveType, isCopy) {  
        className = (className === "dark" ? "":"dark");  
        //拖拽成功时,修改被拖拽节点的pid  
        if(treeNodes && targetNode){  
            alert(treeNodes[0].id);
            alert(targetNode.id);
            var isDeled=false;
            $.ajax({  
                 type : "POST",    
                 async : false,    
                 url : "${pageContext.request.contextPath}/itemcat/editTree",    
                 data :    
                 {    
                   id : treeNodes[0].id, 
                   pid: targetNode.id ,
                   sortOrder: targetNode.level
                },  
                success:function(result){
                    if (result.status == 200) {  
                        isDeled= true;  
                    } else {  
                        alert("操作失败!");  
                        isDeled= false;  
                    }  
                }  
            });   
            return isDeled;
        }  
    }  
        //-->
       /* 添加根节点*/
      // 添加根目录。界面上添加一个button,点击时执行。(因为,树上直接进行添加操作,添加的是子部门)
    
     function addRoleTree(){
         $.ajax({  
             type : "POST",    
             async : false,    
             url : "${pageContext.request.contextPath}/itemcat/addRootTree",    
             data :    
            {    
                name : "类目一", 
                parentId : 0 ,
                sortOrder:1 
             },  
            success:function(result){
                window.location.reload();
            }  
        });          
    }
    
    </SCRIPT>
    
    评论

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题