[jsTree]: почему события 'rename' и 'move' не запускаются с новыми узлами? - PullRequest
4 голосов
/ 29 июля 2011

Я использую jstree для представления дерева на веб-странице.

Дерево позволяет переименовывать и перемещать узлы.При перемещении или переименовании узла запускаются события rename_node.jstree и rename_node.jstree.

С новыми узлами (созданными с помощью rename_node.jstree events) узел по-прежнему можно переименовывать и перемещать, но move_node.jstree и rename_node.jstreeсобытия не запускаются.

Кажется, что события связаны только с начальными узлами.Я не вижу никакого «живого» метода для привязки событий к узлам, созданным после.

Есть ли возможность сделать это?

Вот пример, который помогает (я надеюсь)понять мою проблему:

 $(function(){
    $("#nodes").jstree({ 
        "plugins" : [ "themes", "html_data", "dnd", "ui", "crrm" ]
    }).bind("move_node.jstree", function (event, data) {
        alert('move');
    }).bind("rename_node.jstree", function (event, data) {
        alert('rename');
    }).bind("create_node.jstree", function (event, data) {
        alert('create_node');
    })

    $("#create_button").click(function () { 
        $("#nodes").jstree("create",null,"last",{data:"name"}); 
    });
});

Ответы [ 2 ]

5 голосов
/ 29 июля 2011

Команда: create_node, а не create, я думаю. Подробнее см. http://www.jstree.com/documentation/core.


К вашему сведению, ваш код будет лучше написан как:

$(function() {
    $("#nodes").jstree({
        "plugins": ["themes", "html_data", "dnd", "ui", "crrm"]
    }).bind("move_node.jstree rename_node.jstree create_node.jstree", function(event, data) {
        var type = event.type;
        alert(type);
        if (type === 'move_node.jstree') {
            //handle move_node.jstree here
        } else if (type === 'rename_node.jstree') {
            //handle rename_node.jstree here
        } else if (type === 'create_node.jstree') {
            //handle create_node.jstree here
        }

    });

    $("#create_button").click(function() {
        $("#nodes").jstree("create", null, "last", {
            data: "name"
        });
    });
});

Я знаю, что это субъективно, но примите это за то, что стоит.

2 голосов
/ 01 августа 2011

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

$("#nodes").jstree("create",null,"last",{data:the_name, attr: {id: the_id}});

Извините за эту ошибку.

...