Javascript InfoVis Toolkit: событие возвращает неверный узел в функции, которая следует - PullRequest
0 голосов
/ 21 сентября 2018

Я натолкнулся на следующую проблему с визуализацией Spacetree Javascript InfoVis Toolkit: когда я щелкаю узел правой кнопкой мыши, действие, которое наступает, воздействует на другой узел в том же поддереве, чем тот, который был фактически нажат.

Вот соответствующая часть кода:

st = new $jit.ST({

    Events: {  
        enable: true,
        onRightClick: function(node, eventInfo, e) {
            console.log(eventInfo); // line 87
            console.log(e); // line 88
            if (node != undefined) {
                console.log(node.id); // line 90
                if (removedNodes.indexOf(node.data.uniqueId)>-1) {
                    console.log(node.id, " has been restored");
                    removedNodes.splice(removedNodes.indexOf(node.data.uniqueId),1);
                } else {
                    console.log(node.id, " has been deleted"); // line 95
                    removedNodes.push(node.data.uniqueId);
                }
                localStorage.setItem("removedNodes", JSON.stringify(removedNodes));
                loadNewTree(currentTreeId, true, 0)
            }
        },
    },
    /* further code */
}

Как вы можете видеть, я помещаю информацию о событии и идентификатор узла целевого узла в вывод консоли (соответствующие номера строк, отмеченные нафрагмент кода выше).Вот консольный вывод для случая, когда нацелен неправильный узел:

Console output from thee code above

Я застрял в этой проблеме и не вижу, что моглоошиблись.Проблема возникает примерно один раз в десять кликов, если щелкают узлы из того же поддерева, часто (но не всегда!) Целевым узлом является тот, который был нажат одним щелчком ранее.

Спасибо за любой ввод!

1 Ответ

0 голосов
/ 02 октября 2018

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

let Node = st.graph.getNode(e.target.attributes.id.nodeValue);

, а затем используйте вновь определенный узел, а не ненадлежащий узел.

...