2012-02-17 116 views
4

我是新的jqTree,我想在ajax調用後重新加載樹。我有這樣的事情:初始化後更新jqTree?

$("select").change(function(){ 
    var url = 'lab.json'; 

    if ($(this).val() === 'RAD') { 
     url = 'rad.json'; 
    } 

    $.get(
     url, 
     function(jsonData) { 
      $("#treedata").tree({data: jsonData}); 
     }, 
     "json" 
    ); 
}); 

第一個調用正在工作,但對於下一個樹不會更新新的數據。

任何想法如何在初始化後更新樹?

感謝

編輯:

我發現了一個解決方案,但它並不是完美的。如果有人有更好的解決辦法,讓我知道:)

$("#treebox").empty().append('<div id="treedata"></div>'); 
     $("#treedata").tree({ 
      data: jsonData 
     }); 

我不得不刪除通過jqTree使用$ .empty()所產生的內容,然後我想用新數據更新樹每次初始化jqTree。

+0

您是否在第二次發送請求時檢查過使用螢火蟲或其他東西?你檢查jsonData內容嗎? – 2012-02-17 09:48:05

+0

新版本的jqTree允許更新樹。查看接受答案中的代碼。 – BenoitD 2012-03-27 06:27:37

+0

我建議閱讀測試套件中的示例。我在文檔中發現了很多似乎不正確的示例。 – Rimian 2012-10-24 05:45:08

回答

5

您可以使用函數'loadData'在樹中加載新數據。最新版本的jqTree(0.6)支持此功能。

例如:

// Assuming the tree exists 
var new_data = [ 
    { 
     label: 'node1', 
     children: [ 
      { label: 'child1' }, 
      { label: 'child2' } 
     ] 
    }, 
    { 
     label: 'node2', 
     children: [ 
      { label: 'child3' } 
     ] 
    } 
]; 

$('#tree1').tree('loadData', new_data); 

另見http://mbraak.github.com/jqTree/#functions-loadData

+0

正確的loadData鏈接:http://mbraak.github.io/jqTree/#functions-loaddata – cellepo 2016-02-04 03:31:54

0

jQtree的當前版本(0.1.3),您可以從服務器延遲加載。

您的文檔說需要SER這樣的網址:

<div id="tree1" data-url="/nodes/"></div>

$('#tree1').tree({ 
    dataUrl: '/example_data.json' 
    data: <original data> 
}); 

所有後續請求將追加節點ID如下:

<data-url>?node=<node-id> 

並且必須設置load_on_demand:

[ 
    { 
    label: 'Saurischia', 
    id: 1, 
    load_on_demand: true 
    }, 
    { 
    label: 'Ornithischians', 
    id: 23, 
    load_on_demand: true 
    } 
] 

另見:

http://mbraak.github.com/jqTree/examples/example5.html

但我有麻煩這項工作,不得不手動dataUrl喜歡的東西屬性:

$(document).ready(function() { 
    $("#tree1").tree({ 
    dataUrl: function(node) { 
     if (node) { 
     return '/nodes.json?node=' + node.id; 
     } else { 
     return '/nodes.json' 
     } 
    } 
    }).bind('tree.click', function(event) { 
    var node = event.node; 
    }); 
}); 
0

假設,你初始化元素$jqtree_element = $("#tree1")和運行一些jqTree初始化:$jqtree_element.tree(...)

我深入代碼(jqTree,1.0.0),發現這非常有用:

$jqtree_element.data('simple_widget_tree')._refreshElements()