Проблема Jstree при использовании refresh_node в некорневом узле

Я использую jstree для отображения нескольких узлов (включая плагины DnD, Type и Contextmenu). Я без проблем получаю все дерево, показываю его правильно, и я могу выбрать любой узел, но после использования операции обновления (с помощью Ajax-вызова сервера) на одном узле я хочу обновить это (и только это) узел. Операция refresh_node(myNode) - это то, что мне нужно, и вызов Ajax работает нормально и дает мне только ту часть поддерева, которая мне нужна.

Но когда jstree пытается перерисовать, я получаю ошибку о несуществующей переменной. Я отладил его и заметил, что родительский массив некоторых узлов исчез.

Я использую альтернативный формат JSON для загрузки своего дерева с этой конфигурацией:

core{
    multiple: false,
    data {
        url: "my_url_string_to_server",
        data: function(node) { return { id: nodeId, /*other params*/ } }
    }
}
/*other plugins config*/

и мой вызов refresh_node:

//nodeId is a string with the name of the node I want to refresh.
var node = $.jstree.reference('.tree-data').get_node(nodeId);
$.jstree.reference('.tree-data').refresh_node(node);
//I tried refresh_node(nodeId) too, with the same error result.

Все узлы моего дерева: { "id", "UniqueId", "parent": "Parent"}, "text", "Name"}, "state": {}, "type": "type" "li_attr" : { { "title", "title" }, { "class", "class" } } "a_attr": { { "class", "class" } }, "data": { { "dbid", "Id " }, { "dbparent", "ParentId" }, { "status", "statusId" } } }

как указано в документации jstree (см. 'альтернативный формат JSON')

возврат списка из них (требуемый узел и все дочерние элементы) в результате вызова ajax (не имеет значения, является ли вызов для корневого узла или другого некорневого узла)

Пожалуйста, подскажите, что я делаю не так?

Огромное спасибо заранее.


person Tistkle    schedule 29.07.2019    source источник


Ответы (1)


Я обнаружил проблему: когда вы звоните с идентификатором, отличным от корневого идентификатора ("#"), обновление имеет дело с дочерними узлами идентификатора узла. Мой метод возвращал корневой узел и дочерние узлы, что неверно. Нет функций для обновления одного узла напрямую из БД, но эта проблема показывает, как чтобы обновить их из js, поэтому я попытаюсь обновить их, получив новый статус через вызов ajax, и использовать этот ответ для обновления всех данных и перерисовки вручную.

Надеюсь, это может быть полезно для других.

Спасибо вам всем!

person Tistkle    schedule 31.07.2019