【发布时间】:2014-11-21 19:55:12
【问题描述】:
我正在努力向 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");
}
}
}
关注this question。
我确实检查了 Google Chrome 调试器,contains 方法是在 jit 源库中的 line edgeHelper 对象上触发的。当我点击某个边缘时,所有contains 调用仅针对一个边缘返回true,而为其余对象返回false。
注释掉enableForEdges 和type: 'Native' 行可防止在jit edgeHelper 行contains 方法上触发aby。
但是,如果我在添加的 onClick 侦听器上设置断点,则无论何时单击节点外部(无论是单击边缘还是空白空间)都会得到 node == false。
所以一般的问题是:如何正确地将事件侦听器添加到 HyperTree 中的边缘?
还有一个更狭隘的问题:我怎么能确定,当 contains 对于某些行返回 true 时,它实际上会触发一个 onClick 侦听器,同时在那里传递一条边,而不是 false。
【问题讨论】:
标签: javascript graph infovis thejit