我很难在Javascript Infovis工具包库的HyperTree对象边缘添加一个边缘事件侦听器。我知道这样一个事实,一切都围绕着"contains"方法,而默认的边缘类型(即"hyperline")并没有实现该方法。
我做了什么:我添加了代码
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调试器中检查过,在jit源代码库中的line
edgeHelper
对象上触发了contains
方法。当我单击某条边时,所有contains
调用只为一条边返回true
,而为其余对象返回false
。
注释掉enableForEdges
和type: 'Native'
行可以防止jit edgeHelper
行contains
方法上的aby触发器。
但是,如果我在added onClick侦听器上设置了一个断点,那么每当我在节点外单击时(无论是在边缘还是在空白处单击),我都会得到node == false
。
所以一般的问题是:如何在HyperTree中正确地将事件侦听器添加到边缘?
还有一个更狭隘的问题:我怎么能确定,当某行的contains
返回true时,它实际上会触发一个onClick侦听器,同时在那里传递一个边,而不是false
。
jit.js中有一个错误。我提交了一个pull请求。