Имеем структуру: пакет-документ-страница.
Имеем API, выдающее данные по запросу:
/package - выдаёт список пакетов
/package/id - выдаёт список документов в пакете
/document/id - выдаёт страницы в документе
Нужно это дело выдавать в JSTree
с lazy-load, т.е. детишек подгружать только при разворачивании соответствующего родителя.
Первый уровень загружается по кнопке с фильтрацией по дате вызовом функции applyFilter
.
Получился такой код:
function applyFilter() {
var verificationApiAddress = 'http://localhost:50352/Zufir/VerificationAPI/1.0.0';
var params = {
importStartDate: importDateBegin,
importEndDate: importDateEnd,
};
$.ajax({
url: verificationApiAddress + '/package',
method: 'get',
crossDomain: true,
cache: false,
xhrFields: {
withCredentials: false
},
data: params
})
.success(function (data) {
$("#packagesTree").jstree({
"plugins": ["themes", "types"],
"core": {
"themes": { name: "proton" },
"types": {
"package": {
"max_children": -1,
"max_depth": -1,
"valid_children": "all"
},
"document": {
"max_children": -1,
"max_depth": -1,
"valid_children": "all"
},
"page": {
"max_children": -1,
"max_depth": -1,
"valid_children": "all"
}
},
"data": (function () {
var result = [];
for (var i = 0; i < data.length; i++) {
result.push({
id: data[i].id,
text: data[i].name,
children: true,
type: "package"
});
}
return result;
})()
}
}).on("open_node.jstree", function (e, data) {
console.log('open!');
var node = data.node;
var childType = "";
var url = "";
if (!node.children.length > 0) {
if (node.type == "package") {
url = "/package/" + node.id;
childType = "document";
}
if (node.type == "document") {
url = "/document/" + node.id;
childType = "page";
}
$.ajax({
url: verificationApiAddress + url,
method: 'get',
crossDomain: true,
cache: false,
xhrFields: {
withCredentials: false
},
data: params
})
.success(function (ajaxResult) {
var result = [];
for (var i = 0; i < data.length; i++) {
result.push({
id: data[i].id,
text: data[i].name,
children: true,
type: "package"
});
}
node.children = result;
})
}
}
);
})
.error(function (obj, status, err) { console.log("Ошибка получения пакетов: ", err); });
}
Увы, мой опыт в общении с JS минимален, так что скорее всего что-то тут не так.
Первый уровень подгружается, но событие на open_node
не выстреливает.
Что я сделал не так?
.success(function (ajaxResult) {
var result = [];
for (var i = 0; i < data.length; i++) { // ajaxResult.length ??
...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Добрый день всем, прошу вашей помощи ибо сам не могу сделать) Есть несколько дивов, с одинаковыми классами (selected), нужно чтобы в переменную...
Задача такая, нужно считать количество акции и вывести их в одном блоке цифрой, после перехода на раздел "акции", нужно обнулить это число...
Нужно сложить дату и время, и сравнить с текущей датой и временемНе могу довести преобразование