2016-07-07 1 views
1

jsTree 플러그인을 사용하고 있는데 두 번째로 refresh()를 호출하면 트리가 오류 /로드 상태로 유지됩니다.jsTree가 두 번째 새로 고침시 실패합니다.

.on('changed.jstree', function (e, data) { 
    var i, j, selectedNode; 
    selectedNode = data.node; 
    currentlySelectedNodeGUID = selectedNode.id; 
    //for (i = 0, j = data.selected.length; i < j; i++) { 
    // selectedNode = data.instance.get_node(data.selected[i]); 
    // currentlySelectedNodeGUID = selectedNode.id; 
    //} 
    $.ajax({ 
     url: '@Url.Action("LocationProperties","Location")', 
     type: 'GET', 
     data: { id: currentlySelectedNodeGUID }, 
     success: function (result) { 
      $('#locationPropertiesPartial').html(result); 
     }, 
     error: function (e) { 
      alert(e); 
     } 
    }); 
}); 

내가 찾은 유일한 문제는 내가이 줄 currentlySelectedNodeGUID = selectedNode.id;에서이 오류 Uncaught TypeError: Cannot read property 'id' of undefined 를 얻을이었다 다음은 코드입니다.

데이터가 있지만 거기에 data.node에는 id 속성이 포함되어 있으며 값은 currentlySelectedNodeGUID에 할당됩니다.

나는 이런 일이 발생하는 이유에 대해 거의 단서가 없습니다. 어떤 도움을 주시겠습니까?

답변

1

refresh()으로 전화하면 현재 선택된 노드가 선택 해제되어 changed 이벤트가 트리거됩니다. 노드가 선택되지 않은 경우 data.nodenull (또는 undefined)입니다. 그래서 data.node.idundefined입니다. 트리가 새로 고쳐진 후 노드가 다시 선택되면 changed이 다시 한 번 트리거됩니다. 이번에는 노드 객체를 사용할 수 있습니다.

그러면 아약스 쿼리를 보내기 전에 노드가 실제로 선택되어 있는지 확인해야합니다.

0

할당 전에 data.node 또는 data.selected이 null인지 확인하십시오. 이 jstree가 새로 고쳐지면 오류가 발생하지 않고 언제든지 새로 고칠 수 있습니다.

if (data.node != null) { 
    var dataid = data.node.id; 
}