Библиотека jsTree - Почему я не могу создать более одного вложенного узла?

Я никогда не использовал эту библиотеку раньше, и я все еще изучаю ее. Поэтому я нашел способ добавлять узлы к уже созданному дереву с помощью функции. Я использую эту функцию для добавления дочерних узлов к уже созданным основным узлам или для создания основных узлов самостоятельно.

Но проблема в том, что я могу создать только один дочерний узел и не могу создать дочерний узел для дочернего узла. Вот мой код:

$(function () {
    $('#jstree').jstree({
        'plugins': ["contextmenu", "dnd", "state"],
        'core': {
            'data': [{
                "id": "1",
                "text": "1",
                "state": {
                    "opened": false
                }
            }],
            'check_callback': true
        }

    });
});

$('#jstree').on('ready.jstree', function (e, data) {
        createNode("#1", "11", "1.1", "last");
    createNode("#jstree", "2", "2", "last");
        createNode("#2", "21", "2.1", "last");
            createNode("#21", "211", "2.1.1", "last");
    createNode("#jstree", "3", "3", "last");
        createNode("#3", "31", "3.1", "last");
        createNode("#3", "32", "3.2", "last");
            createNode("#32", "321", "3.2.1", "last");
            createNode("#32", "322", "3.2.2", "last");
        createNode("#3", "33", "3.3", "last");
    createNode("#jstree", "4", "4", "last");
        createNode("#4", "41", "4.1", "last");

});


function createNode(parent_node, new_node_id, new_node_text, position) {
    $('#jstree').jstree('create_node', $(parent_node), { "text":new_node_text, "id":new_node_id }, position, false, false);
}

Поэтому моя проблема заключается в том, что узлы с id: 211, 321, 322 не отображаются в браузере, и на консоли нет ошибок.

Я что-то пропустил? Может быть, какое-то свойство библиотеки, о котором я не знаю, и мне следует добавить его в JSON, когда я вызываю функцию jstree() для создания главного дерева?

PS решено:

Во всяком случае я нашел более умный способ сделать его гибким.

var jsonDataMain = {
    'plugins': ["contextmenu", "dnd", "state"],
    'core': {
        'check_callback': true,
        'data': [{
            "id": "1",
            "text": "1",
            "children": [{
                "text": "1.1",
                "id": "11"
            },
                {
                    "text": "1.2",
                    "id": "12"
                },
                {
                    "text": "1.3",
                    "id": "13"
                },
                {
                    "text": "1.4",
                    "id": "14"
                }]
        },
            {
                "id" : "2",
                "text" : "2",
                "children": [{
                    "text": "2.1",
                    "id": "21"
                },
                    {
                        "text": "2.2",
                        "id": "22"
                    },
                    {
                        "text": "2.3",
                        "id": "23",
                        "children": [{
                            "text" : "2.3.1",
                            "id" : "231",
                            "children": [{
                                "text" : "2.3.1.1",
                                "id" : "2311"
                            }]
                        }]
                    },
                    {
                        "text": "2.4",
                        "id": "24"
                    }]
            }]
    }

};

$(function () {
    $('#jstree').jstree(jsonDataMain);
});

$('#jstree').on('rename_node.jstree', function (e, data) {

    jsonDataMain.core.data.push({
        "id": "3",
        "text": "3",
        "children": [{
            "text": "3.1",
            "id": "31"
        }]
    });

    $('#jstree').jstree(true).settings.core.data = jsonDataMain.core.data;
    $('#jstree').jstree(true).refresh();

});

Так что в этом случае у меня есть объект. Я вызываю функцию jsTree и даю этот объект в качестве аргумента.

После этого, когда я ловлю какое-то событие (в данном случае это событие переименования contextmenu), я просто добавляю новый узел в object.core.data, и когда событие запускается, узел добавляется в дерево с этими двумя строками.

$('#jstree').jstree(true).settings.core.data = jsonDataMain.core.data;
$('#jstree').jstree(true).refresh();

Конечно, если вы хотите сохранить новый добавленный узел в тройке при обновлении страницы, вам нужно будет сохранить объект, который используется для создания дерева, в какой-либо базе данных или что-то вне этого файла JS и при изменении его на использование что-то вроде запроса PUT, измените его, и тогда вы сохраните изменения.

Я думаю, что это хороший способ создать свое дерево и изменить его заранее. Я надеюсь, что я помогу кому-то с моими решениями.

0 ответов

Другие вопросы по тегам