2016-07-07 12 views
1

jsTreeプラグインを使用していて、2回目にrefresh()を呼び出すと、ツリーはエラー/ロード状態のままになります。私が見つけた唯一の問題は、私はこの行currentlySelectedNodeGUID = selectedNode.id;時にこのエラー Uncaught TypeError: Cannot read property 'id' of undefined を得ることだったjsTreeが2回目のリフレッシュで失敗する

.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); 
     } 
    }); 
}); 

:ここ コードです。

データがありますが、data.nodeにはidプロパティが含まれており、値はcurrentlySelectedNodeGUIDに割り当てられています。

なぜこれが起こるのか、私はかなり無知です。助けてください?

答えて

1

refresh()に電話すると、現在選択されているノードの選択が解除され、changedイベントがトリガーされます。ノードが選択されていない場合、data.nodenull(またはundefined)です。だからdata.node.idundefinedです。ツリーがリフレッシュされた後、ノードが再び選択され、changedが再度トリガされます。今回はノードオブジェクトを使用できます。

そのため、ajaxクエリを送信する前に実際にノードが選択されているかどうかを確認する必要があります。

0

割り当て前にdata.nodeまたはdata.selectedがヌルであるかどうかを評価します.は、jstreeがリフレッシュされるときにエラーが発生しないため、必要なときにいつでも更新できます。

if (data.node != null) { 
    var dataid = data.node.id; 
} 
関連する問題