【问题标题】:Javascript InfoVis Toolkit: Event returns wrong node in function that ensuesJavascript InfoVis Toolkit:事件在随后发生的函数中返回错误节点
【发布时间】:2018-09-21 18:05:58
【问题描述】:

我偶然发现了 Javascript InfoVis Toolkit 的 Spacetree 可视化存在以下问题:当我用鼠标右键单击一个节点时,随后的操作在同一子树中的不同节点上运行,而不是实际单击的节点。

以下是相关的代码部分:

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 */
}

如您所见,我将目标节点的事件信息和节点ID放到控制台输出(上面代码sn-p中标记的相关行号)。这是针对错误节点的情况的控制台输出:

我被困在这个问题上,看不出哪里出了问题。如果单击同一子树中的节点,则该问题大约在十次单击中发生一次,经常(但不总是!)目标节点是之前单击一次的节点。

感谢您的任何意见!

【问题讨论】:

    标签: infovis


    【解决方案1】:

    找到解决问题的方法:直接从事件中获取节点 ID:

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

    然后使用新定义的节点而不是行为不端的节点。

    【讨论】:

      猜你喜欢
      • 2013-07-03
      • 2012-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 2016-05-15
      • 2014-08-03
      • 1970-01-01
      相关资源
      最近更新 更多