2012-04-12 9 views
2

lazyloading機能とopen_all機能を併用する際に問題が発生しています。Jstree lazyloadingおよびすべての問題を展開

ツリーの内容は、遅延読み込み機能を使用して読み込まれます。

ノードを選択して[すべて展開]ボタンをクリックすると、ノードのすべての子ノードがjstree ajaxコールを使用してフェッチされ、open_all関数を使用して開きます。これは初めて完全に動作します。

しかし、同じノードでexpand allをクリックすると、同じajax urlが再帰的にヒットします。 (私たちはopen_allを使ってノードをオープンするたびにURLがヒットすると考えています)。意図した動作は、(データがすでにロードされているので)urlを呼び出さないことです。open_all関数だけを実行する必要があります。

あなたが問題にアドバンス

よろしく ハリ

答えて

1

$("#TreePanel").jstree({ 
    "xml_data" : { 
     "ajax" : { 
      "url" : "/ajax/loadTree", 
      "type" : "post", 
      "data" : function(node) { 
       var data = {};    
       data.dunsNumber = ${dunsNumber}; 
       if (node == -1) { 
        //set duns number to data 
       } else { 
        data.selectedNodeId = node.attr("id"); 
        data.expandAll = isExpandAll; 
       } 
       return data; 
      }, 
      "success" : function(data) { 
       if ($(data).attr('id') == 'error') { 
        $("#overlayContent").empty();      
       } else { 
        return data; 
       } 
      } 
     }, 
     "xsl" : "nest" 
    }, 
    "plugins" : [ "themes", "xml_data" ] 
}); 


     //code to expand all nodes 


     $("#ufvExpandAll").bind("click", function() { 
    isExpandAll= true; 
    $("#TreePanel").jstree("open_all", selectedNode); 
    isExpandAll= false; 
    }); 

     //code to collapse all nodes 

$("#ufvCollapseAll").bind("click", function() { 
    $("#TreePanel").jstree("close_all", selectedNode); 
}); 

    //code to get the node and set on a variable on clicking a node 

     var selectedNode; 
$("#TreePanel").delegate("a", "click", function(e, data) { 
    var node = $(e.target).closest("li"); 
    if (selectedNode != undefined && selectedNode != null) { 
     $("#" + selectedNode.id + " > a").removeClass("jstree-default-    selected-node"); 
    } 
    selectedNode = node[0]; 
    $("#" + selectedNode.id + " > a").addClass("jstree-default-selected-     node"); 
     $("#ufvExpandAll").attr("disabled", false); 
    $("#ufvCollapseAll").attr("disabled", false); 
    return false; 
}); 

おかげでノードを検査してみツリーをロードする

//コードを修正する方法を明確にしてくださいでした子供にそれをロードするロジックを実行する前に、既存の子があるかどうかを確認します。

.bind("open_node.jstree", function (event, data) { 
    var node = $(data.rslt.obj); 
    var children = $.jstree._reference(node)._get_children(node); 
    if (children.length==0){ 
    //node is empty, so do node open logic here 
    } 
}) 
関連する問題