Я использую JSTree с функциональностью Ajax Loading/Lazy Loading в своем приложении.
Теперь я пытаюсь открыть все узлы. Итак, в событии Loaded я пишу метод open_all, чтобы открыть все узлы.
$('#DIVTree').jstree({
'core': {
'multiple': false,
'data': {
'url': appRootDir + 'Tree/GetFilterList',
'data': function (node) {
return { 'ID': node.id};
}
}
},
'plugins': ['state'],
}).on('loaded.jstree', function (node) {
$('#DIVTree').jstree(true).open_all();
});
Теперь это начинает открывать все узлы, которые я действительно хотел.
Но теперь у меня есть еще одна кнопка «Отмена».
Я хочу разрешить пользователю прекратить загрузку узлов при нажатии кнопки отмены.
Я пробовал много способов. Я попытался реализовать рекурсию с событием «after_open» и событием «load_node».
$('#DIVTree').jstree({
'core': {
'multiple': false,
'data': {
'url': appRootDir + 'Tree/GetFilterList',
'data': function (node) {
return { 'ID': node.id };
}
}
},
'plugins': ['state'],
}).on('load_node.jstree', function (node) {
if (recrusiveStop == false) {
OpenNodes();
}
}).on('after_open.jstree', function (node) {
if (recrusiveStop == false) {
OpenNodes();
}
});
var OpenNodes = function () {
var nodeID = '';
$('#DIVTree .jstree-closed').each(function () {
if ($('#DIVTree').jstree(true).is_loaded(this.id) == false) {
nodeID = this.id;
return false;
}
});
if (nodeID != '') {
$('#DIVTree').jstree(true).open_node(nodeID);
}
}
Но пока не получается реализовать.
В «after_open» событие запускается только один раз. Таким образом, расширяется только один узел (без подузла), поэтому он не остается в цикле. в то время как я все еще хочу расширить братьев и сестер.
Есть ли четкий способ реализовать это?
Я хочу открыть все узлы, а также остановить загрузку, когда пользователь нажмет кнопку отмены.