jQuery ztree 비동기 로드 추가 서브 노드 중복 문제

zTree 소개
    ztree 는 jQuery 에 의 해 이 루어 진 다기 능'트 리 플러그 인'입 니 다.우수한 성능,유연 한 배치,다양한 기능 의 조합 은 ztree 의 가장 큰 장점 입 니 다.
    ztree 는 오픈 소스 무료 소프트웨어(MIT 허가증)입 니 다.ztree 에 관심 이 있 거나 ztree 가 계속 발전 할 수 있 도록 지원 하고 싶다 면 기 부 를 할 수 있 습 니 다.
  • ztree v 3.0 은 핵심 코드 를 기능 에 따라 분할 하 였 으 며,필요 하지 않 은 코드 는 불 러 오지 않 아 도 됩 니 다
  • 지연 로드 기술 을 사용 하여 수만 개의 노드 가 쉽게 로드 되 고 IE6 에서 도 기본적으로 스톱워치
  • 를 할 수 있다.
  • IE,FireFox,Chrome,Opera,Safari 등 브 라 우 저 호 환
  • JSON 데이터 지원
  • 정적 및 Ajax 비동기 로드 노드 데이터 지원
  • 피부/사용자 정의 아이콘 을 임의로 바 꾸 는 것 을 지원 합 니 다(css 에 의존)
  • 매우 유연 한 checkbox 또는 radio 선택 기능 지원
  • 다양한 이벤트 응답 리 셋 제공
  • 유연 한 편집(추가/삭제/수정/검사)기능 으로 노드 를 마음대로 끌 수 있 고 여러 노드 로 끌 수 있 습 니 다
  • 한 페이지 에서 여러 개의 Tree 인 스 턴 스 를 동시에 생 성 할 수 있 습 니 다
  • 간단 한 매개 변수 설정 은 유연 하고 변화 가 많은 기능 을 실현 한다
  • 원시 문제
    
    //    ,      
    function addNode(event) {
      rMenu.css({ "visibility": "hidden" });
      var treeNode = zTree.getSelectedNodes()[0];
      var pid;
      var nodeName;
      var treelevel;
      if (!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) {
       //      
    pid = 0;
       treeNode = null;
       treelevel = 1;
      } else if (treeNode) {
       //      
    pid = treeNode.id;
      treelevel = 2;
      }
      $.post(
       "AddNode.action",
       { type: treelevel, id: pid },
       function(nodeIdAndName) {
        var params = /([^\|]+)\|([^\|]+)/.exec(nodeIdAndName);
        if (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.open)) {
         zTree.expandNode(treeNode, true);
        }
        treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
       });
    }
    원래 하위 노드 를 직접 추가 할 때 부모 노드 가 전개 되 지 않 으 면 똑 같은 하위 노드 두 개 를 추가 합 니 다(첫 번 째 때).나중에 저 는 아버지 노드 의 전개 여 부 를 판단 하 였 으 나 아버지 노드 가 전개 되면 똑 같은 서브 노드 두 개 를 추가 하 는 것 이 되 었 습 니 다.이 문 제 는 어떻게 해결 해 야 합 니까?
    방법 1 
    장차
    
    if (!((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.open)) {
         zTree.expandNode(treeNode, true);
        }
        treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
    ...로 바꾸다
    
    if(!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0)
        {
         treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
        }
        else if(treeNode.open)
        {
         if(treeNode.isParent)
         {
          zTree.reAsyncChildNodes(treeNode, "refresh");
         }
         else
         {
          treeNode.isParent=true;
          zTree.reAsyncChildNodes(treeNode, "refresh");
         }
        }
        else
        {
         zTree.expandNode(treeNode, true);
         treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
        }
    문 제 는 해결 할 수 있 지만 최적화 되 었 습 니까?고 친 코드 가 너무 많은 것 같 아 요. 
    최선 의 방법
    이렇게 귀 찮 게 안 해도 될 것 같은 데?이틀 전 비슷 한 질문 에 답 했다.
    1.하위 노드 를 추가 하려 면 ajax 를 클릭 하여 배경 에 데 이 터 를 저장 하고 success 이 벤트 를 캡 처 합 니 다.
    2.ajax success 시 treeNode.zAsync 속성 을 이용 하여 이 부모 노드 가 비동기 로 불 러 온 적 이 있 는 지 알 수 있 습 니 다.false 라면 reAsyncChildNodes 를 직접 리 셋 하고 true 라면 addN 을 이용 합 니 다.
    
    if ((!treeNode && event.target.tagName.toLowerCase() != "button" && $(event.target).parents("a").length == 0) || treeNode.zAsync) 
         treeNode = zTree.addNodes(treeNode, { id: params[1], pid: pid, isParent: "true", name: params[2], editable: "true", treelevel: treelevel });
        else
         zTree.reAsyncChildNodes(treeNode, "refresh");
    총결산
    위 에서 말 한 것 은 소 편 이 여러분 에 게 소개 한 jQuery ztree 비동기 로드 에 서브 노드 중복 문 제 를 추가 하 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 저 에 게 메 시 지 를 남 겨 주세요.소 편 은 신속하게 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

    좋은 웹페이지 즐겨찾기