Обновление jqTree после инициализации? - PullRequest
4 голосов
/ 17 февраля 2012

Я новичок в jqTree , и я хотел бы перезагрузить дерево после вызова ajax.У меня есть что-то вроде этого:

$("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 каждый раз, когда я хочу обновить дерево новыми данными.

Ответы [ 3 ]

5 голосов
/ 25 марта 2012

Вы можете использовать функцию «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 голосов
/ 08 мая 2015

Предположим, вы инициализировали элемент $jqtree_element = $("#tree1") и выполнили некоторую инициализацию jqTree: $jqtree_element.tree(...)

Я копался в коде (jqTree, 1.0.0) и нашел это очень полезным:

$jqtree_element.data('simple_widget_tree')._refreshElements()
0 голосов
/ 25 октября 2012

Текущая версия jQtree (0.1.3) позволяет лениво загружаться с сервера.

Ваша документация говорит, что нужно указывать URL следующим образом:

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

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

Все последующие запросы будут добавлять идентификатор узла следующим образом:

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