2014-11-26 1 views
0

JSTree에 대한 초기 데이터를로드하려고 할 때 문제가 있습니다. 루트 노드에 연결된 2 최상위 노드가 있지만로드 할 때 추가 된 마지막 노드가 JSTree 내에서 중복되는 것처럼 보입니다. 처음에는 매번 새로운 객체를 명시하지 않는 것이 내 잘못이라고 보았지만 해결했습니다. NET MVC 그래서 초기 데이터를 내보기 (즉 메서드의 데이터 매개 변수로 전달 된 데이터) 전달되는 모델에서 오는 사용하고 있습니다.create_node로 데이터를로드 할 때 JSTree가 중복 노드를 생성합니다.

this.loadInitialData = function (data) { 
    var tree = self.getTree(); 

    for (var i = 0; i < data.length; i++) { 
     var node = new Object(); 
     node.id = data[i].Id; 
     node.parent = data[i].Parent; 
     node.text = data[i].Text; 
     node.state = { 
      opened: data[i].State.Opened, 
      disabled: data[i].State.Disabled, 
      selected: data[i].State.Selected 
     }; 
     node.li_attr = { "node-type": data[i].NodeType }; 
     node.children = []; 

     for (var j = 0; j < data[i].Children.length; j++) { 
      var childNode = new Object(); 
      childNode.id = data[i].Children[j].Id; 
      childNode.parent = data[i].Children[j].Parent; 
      childNode.text = data[i].Children[j].Text; 
      childNode.li_attr = { "node-type": data[i].Children[j].NodeType }; 
      childNode.children = data[i].Children[j].HasChildren; 

      node.children.push(childNode); 
     } 

     tree.create_node("#", node, "last"); 
    } 
} 

내 초기 코드는 다음과 같이 노드를 선언했다 :

var node = { 
    id: data[i].Id 
} 

나는 그게 내가보고하지만 아무것도 변경되지 않은 고정하고있는 무슨의 원인라고 생각 했어요. 다음은 애플리케이션을 실행할 때 일어나는 일입니다. 메서드의 첫 번째 패스에서 모든 것이 제대로 작동하는 것처럼 보입니다.

JSTree on the first pass

그러나 루프가 두 번째 (마지막) 시간 동안 실행 한 후 여기에 최종 결과입니다

.

JSTree final result

노드 객체가 서로의 단지 사본입니다 것 같습니다,하지만 난 디버거를 통해 코드를 실행할 때 나는 개체마다 초기화되고 참조하십시오. 누구든지 JSTree에서이 동작을 일으키는 아이디어가 있습니까? create_node 이외의 초기 노드를 만드는 데 다른 방법을 사용해야합니까?

미리 감사드립니다.

답변

-1

문제점을 발견했습니다. 난 몰랐지만 두 노드 그룹에 대해 동일한 id로 내 id 속성을 설정했습니다. 내가 고칠 후 모든 것이 예상대로 작동하기 시작했다.

+0

한 페이지에서 다른 페이지로 트리를 복사 할 때 문제가 있으므로 답변을 설명해주십시오. ( –