jsTree получить братьев и сестер узла

Я использую перетаскивание с помощью 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 ответ

Решение

Вы можете получить нового родителя узла в событии 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);
});
Другие вопросы по тегам