Как обновить значения jstree node без перезагрузки

У меня есть jstree, который я создал со следующим кодом:

$('#mytree').jstree({"core": { "data" : value
                             , "themes" : { "dots": false
                                          , "icons": false }
                             }
                    }
                   );

Я могу перестроить его новыми данными по этому коду:

$('#mytree').jstree(true).settings.core.data = new_data;
$('#mytree').jstree(true).refresh();

но это может быть дорого, когда у вас много узлов. Я хотел бы добиться того, что я хотел бы обновить значение элементов (т.е. Часть node.text) без восстановления всего дерева. Я получаю новые значения через websocket в одном сообщении (полная строка JSON, которая будет new_data), но структура не меняется. Как я могу это сделать? Спасибо!

Ответ 1

Вам нужно не refresh(), а redraw(), поэтому код

$('#mytree').jstree(true).settings.core.data = new_data;
$('#mytree').jstree(true).redraw(true);

Вы можете найти функции в jstree API.

Согласно предложению zmirc, в версии v.1.1 используйте:

$('#mytree').jstree(true).settings.core.data = new_data;
$('#mytree').jstree(true).refresh();

Ответ 2

для удаления node и перезагрузки дерева

 $('#mytree').jstree(true).refresh();

для тех, кому нужно перерисовывать без перезапуска использования дерева

jQuery('#data').jstree(true).refresh(true);

Ответ 3

$ ( '# Mytree') jstree (истина).refresh(). работает, но в моем случае это вызывает утечку потока. каждое обновление добавляет еще одну ветку

Ответ 4

Вы можете обновить узел этим

$('#treeView').jstree(true).refresh_node("node_id_here")

Ответ 5

Я загружаю данные через URL, поэтому моя часть обновления выглядит так:

$('#groupTree').jstree(true).settings.core.data.url = get_group_url();