jsTree получить братьев и сестер узла - PullRequest
0 голосов
/ 25 июня 2018

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

Вот пример:

img1

Если я перетащу New node в узел Gamme 1, теперь его братья и сестры gamme 501 и gamme 500

img2

Получение данных о перемещенном узле и обновление его позиции в БД не является проблемой:

.on("move_node.jstree", function (e, data) {
    console.log(data);
    $.ajax({
        type: "POST",
        url: Routing.generate('saveGammeNewPosition'),
        data: {
            gammeId: data.node.id,
            newParentId: data.node.parent,
            position: data.position
        }
    });
})    

Но я понятия не имею, как получить информацию о новых братьях и сестрах узла, который был перемещен.

Когда я делаю что-то подобное, к сожалению, я не получаю данных о позиции, поскольку json jsTree не имеет атрибута позиции:

$('#tree').jstree(true).get_json(data.node.parent, {flat: true})

Так есть ли способ получить данные о положении братьев и сестер?

1 Ответ

0 голосов
/ 27 июня 2018

Вы можете получить нового родителя узла в событии move_node и использовать его для получения его непосредственных потомков.

function getSiblings(nodeID, parent) {
    var tree = $('#tree').jstree(true),
        parentNode = tree.get_node(parent),
        aChildren = parentNode.children,
        aSiblings = [];

    aChildren.forEach(function(c){
        if(c !== nodeID) aSiblings.push(c);
    });
    return aSiblings;
}

$('#tree').on("move_node.jstree", function (e, data) {
    var aSiblings = getSiblings(data.node.id, data.parent);
    console.log(aSiblings);
});
...