Это касается jsTree jQuery plugin . Я уже некоторое время борюсь с этим, только чтобы понять, что это это невозможно (изначально), поэтому я подумал о следующем решении моей проблемы ниже (которое не работает).
У меня есть дерево, использующее плагин json_data с ajax. Как только вы откроете конкретный узел результат сервера представляет собой массив из более чем 1000 json-узлы. Ответ довольно быстрый, но сам рендеринг требует некоторое время (пользовательский опыт показывает, что раздражающий "скрипт не ответ - сообщение «остановить скрипт / продолжить».
Решение, о котором я думал, заключалось в ограничении результатов, отправляемых обратно из сервер на меньшее число (скажем, 200) и использование некоторого "показать больше" label (или используя событие прокрутки jQuery), чтобы получить следующие 200. Однако использование jstree.create на каждом из этих узлов кажется очень медленно. Затем я заметил эту ветку в группе google jsTree в котором Иван предлагает создать все узлы сразу, используя функция parse_json - у меня это не работает.
Короткий фрагмент кода того, что я пытаюсь сделать: (при нажатии метки «показать больше»):
$.ajax({
// send data to server in order to get the relevant json back
}(),
success : function (r) {
var parent_node = data.inst._get_parent(data.rslt.obj);
var id = parent_node.attr("id");
$("#root_tree").jstree("_parse_json", r, parent_node );
$("#root_tree").jstree("clean_node", parent_node, false);
}
});
В приведенном выше примере не отображается json и добавляются дочерние элементы в родительский узел.
Я был бы очень признателен за любой другой подход или если бы кто-нибудь мог указать что я делаю не так. Опять же, используя:
$.each(r, function(i, node) {
var id = parent_node.attr("id");
$("#root_tree").jstree("create", "#"+id, "last", node, false, true);
});
Работает, но очень-очень медленно (медленнее, чем рендеринг всех 1000 узлов. вместе).
Спасибо