2012-04-26 26 views
1

私の要件の1つは、jstreeで選択されたノードのすべての子ノードを(要求に応じてajax経由で)ロードし、その下の葉ノードのすべてのアンカー要素IDを返すことです。選択したノードをopen_allメソッドに渡すことでこれを行うことができます。open_allイベントでは、鉛ノードのIDを返します。しかし、私の問題は、選択されたノードがルート以外の非葉ノードで、open_allイベントが2回発生したときです。選択したノードがルートまたはリーフの場合は正常に動作します。どんな助けでも大歓迎です。jstree open_allイベントが2回発生する

$tree 
    .bind("loaded.jstree", function(event, data) { 
     //alert("Tree loaded"); 
    }) 
    .bind("select_node.jstree", function(event, data) {    
     data.inst.open_all(data.rslt.obj, true); 
    }) 
    .bind("check_node.jstree", function(event, data) { 
     //checkboxes are enabled on some pages 
     data.inst.open_all(data.rslt.obj, true); 
    }) 
    .bind("open_all.jstree", function(event, data) { 
     //get all ids of leaf nodes under selected node if selected node is 
     //non-leaf node. If selected node is a leaf node return it's id. 

     //alert(leaf_ids); 

     //**Here is my problem:** The alert box pops up twice if 
     //open_all was passed a non-leaf node other than root.The first time 
     //ids are empty but the second time I see the ids.   
    }) 
    .jstree({ 
     "plugins": plugins_include, 
     "core": core_options, 
     "html_data": html_data, 
     "themes": { 
      "theme": "classic", 
      "dots": false, 
      "icons": false 
     }, 
     "strings": { loading: "Loading..." }, 
     "checkbox": { 
      "override_ui": true 
     }, 
     "ui": { "select_multiple_modifier": false } 
    }); 

答えて

1

open_allを使用してバインドするより深刻な理由があるかどうかわかりませんが、open_nodeもオプションです。

.bind("open_node.jstree", function (event, data) { 
    var node = $(data.rslt.obj); 
    var nodeID = node.attr('id'); 

    var children = $.jstree._reference(node)._get_children(node); 
    if (children.length==0){ 
    // Dynamically load node since it has nothing loaded yet 
    } 
}) 
1

問題を解決するためにjstreeプラグインのopen_allメソッドを変更する必要がありました。

私はopen_all関数の最後の行に1つの以上の条件を追加しました:this.is_open(original_obj)

を//コールバックは(this.is_open(original_obj)場合、すべてのノードが
オープンされた後に発射されるように、長さ=== 0){this .__ callback({"obj":original_obj});&
original_obj.find( 'li.jstree-closed')。 }

この変更を行った直後にアラートボックスが2回ポップアップを停止しました。

関連する問題