2011-12-12 99 views
3

我使用Jstree 1.0RC3,並且沒有讓它工作來選擇一個節點並讓樹打開以便此節點可見。 我的代碼是這樣的:jstree預選節點並打開所有需要的父節點

.jstree({ 
    // List of active plugins 
    "plugins" : [ 
     "themes","json_data","ui","crrm","dnd","search","types","hotkeys","contextmenu" 
        //"themes","json_data","ui","crrm","cookies","dnd","types","hotkeys" 
    ], 

    "json_data" : { 
     "ajax" : { 
      "url" : $path + "/server.php", 
      "data" : function (n) { 

       return { 
        "operation" : "get_children", 
        "id" : n.attr ? n.attr("id").replace("node_","") : <?php echo($jstree_root); ?> 


       }; 
      } 
     } 
    }, 

    }, 
"core" : { 
     // just open those two nodes up 
     // as this is an AJAX enabled tree, both will be downloaded from the server 
     "initially_open" : [ <?php echo($jstree_root_node); ?> ] 

與UI插件是空的。 php echo($ jstree_root_node)打開根目錄下的第一個層級以獲得更好的概述。有時我想傳遞一個應該選擇的節點的ID。通過默認打開樹,該節點並不總是可見的。我所看到的是,如果節點在第一層級中可見,那麼它將被選中。如果它更深,它不會被選中。

我在論壇發現JSTREE調用之前用這一點,但它不工作:

 .bind("reopen.jstree", function() { 
     $("#demo").jstree("select_node", "#node_1637"); 
     $("#node_1637").parents(".jstree-closed").each(function() { 
      $("#demo").jstree("open_node", this, false, true); 
     }); 
    }) 

任何想法在這一個?這似乎是正確的在我的鼻子前面,但我沒有看到它....

gb5256

回答

3

我認爲有2種方法來處理它。

第一個選項 - 使用「beginning_open」,您需要指定從根節點到選定節點的所有節點。該jsTree將通過這個序列,打開每一個節點,加載它的內容,打開下一個節點,加載它的內容等

腳本的一些基本思路:

"core" : { 
     "initially_open" : [ < ?php echo implode(',', $path_to_node) ?> ] 
} 

第二個選項 - 使用「搜索」插件,你需要創建一個php腳本,將被ajax請求調用,並應返回到搜索節點的路徑。 所以你定義的搜索插件:

 'search' : { 
      'case_insensitive' : true, 
      'ajax' : { 
       'url' : 'search_script.php', 
       'data' : function(n) { 
        return { search_id : n }; 
       } 
      } 
     }, 

然後綁定樹被加載後的搜索行動:要打開同樣的方式

$('#tree').bind('loaded.jstree', function(e, data){ 
      $('#tree').jstree('search', <?php echo($jstree_searched_node); ?>); 
    });   

的search_script.php應返回節點鍵陣列如第一種選擇。

這不是完整的複製&粘貼解決方案,但我希望這會帶你以正確的方式成功完成它。

+0

搜索是一個很好的方向,幾乎沒有太多的編碼(只有在後臺稍微改變)所有的用例最終確定 我仍然缺少的是打開完整路徑時調用的異步事件。 –

-1

你可以使用open_all來打開所有可用的節點。

$(「#TreeID」)。jstree('open_all');