我正在努力将边缘事件侦听器添加到 Javascript Infovis 工具包库中的 HyperTree 对象边缘。我知道这样一个事实,即一切都围绕“包含”方法,该方法未针对默认边缘类型(即“超线”)实现。
我做了什么:我添加了代码
Edge: {
overridable: true,
type: 'line',
lineWidth: 4,
color: '#bbb'
}
到 HyperTree 构造函数。我已经添加了类似的东西
Events: {
enable: true,
enableForEdges: true,
type: 'Native',
onClick: function (node, eventInfo, e)
if (!node) return;
alert(node);
if (node.nodeFrom) {
alert("target is a node");
} else {
alert("target is an edge");
}
}
}
下面这个问题。我确实检查了 Google Chrome 调试器,该contains
方法是line
edgeHelper
在 jit 源库中的对象上触发的。当我单击某个边缘时,所有contains
调用true
仅返回一个边缘,而返回false
其余对象。
注释掉行enableForEdges
并防止 jit行方法type: 'Native'
上的 aby 触发器。edgeHelper
contains
但是,如果我在添加的 onClick 侦听器上放置一个断点,则node == false
无论何时单击节点外部(无论是单击边缘还是空白空间)都会得到。
所以一般的问题是:如何正确地将事件侦听器添加到 HyperTree 中的边缘?
还有更狭隘的问题:我怎么能确定,当contains
某些行返回 true 时,它实际上会触发一个 onClick 侦听器,同时在那里传递一条边,而不是一个false
.