JSTree - не возникает событие open_node

266
04 мая 2018, 11:09

Имеем структуру: пакет-документ-страница.
Имеем 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 не выстреливает.

Что я сделал не так?

Answer 1
                .success(function (ajaxResult) {
                    var result = [];
                    for (var i = 0; i < data.length; i++) { // ajaxResult.length ??
                      ...
READ ALSO
JQuery положить в переменную текст из элементов нескольких классов

JQuery положить в переменную текст из элементов нескольких классов

Добрый день всем, прошу вашей помощи ибо сам не могу сделать) Есть несколько дивов, с одинаковыми классами (selected), нужно чтобы в переменную...

227
Как правильно выполнить скрипт Jquery cookie?

Как правильно выполнить скрипт Jquery cookie?

Задача такая, нужно считать количество акции и вывести их в одном блоке цифрой, после перехода на раздел "акции", нужно обнулить это число...

217
Linq to SQL сложить дату и время

Linq to SQL сложить дату и время

Нужно сложить дату и время, и сравнить с текущей датой и временемНе могу довести преобразование

245
Сохранение звуков

Сохранение звуков

У меня есть приложение, Sound Board на андроид , сделанное на Unity (те

235