如何防止Javascript InfoVis SpaceTree`ST.select()`方法崩溃节点?
我正在使用JavaScript InfoVis工具包,尤其是可视化 我需要展开所有树,然后显示从特定叶节点返回根节点的路径 我已经把树很好地展开了,但是选择叶节点并突出显示返回根的路径给我带来了一些问题 我正在使用如何防止Javascript InfoVis SpaceTree`ST.select()`方法崩溃节点?,javascript,visualization,charts,infovis,Javascript,Visualization,Charts,Infovis,我正在使用JavaScript InfoVis工具包,尤其是可视化 我需要展开所有树,然后显示从特定叶节点返回根节点的路径 我已经把树很好地展开了,但是选择叶节点并突出显示返回根的路径给我带来了一些问题 我正在使用ST.select(node,onComplete)函数来选择我感兴趣的叶节点,实际上,返回根节点的路径(线和节点)会高亮显示 为此,我实施了onBeforePlotNode和onBeforePlotLineST.Controller方法,以允许我将节点高亮显示回根节点及其绘图线: o
ST.select(node,onComplete)
函数来选择我感兴趣的叶节点,实际上,返回根节点的路径(线和节点)会高亮显示
为此,我实施了onBeforePlotNode
和onBeforePlotLine
ST.Controller
方法,以允许我将节点高亮显示回根节点及其绘图线:
onBeforePlotNode: function(node){
//add some color to the nodes in the path between the
//root node and the selected node.
if (node.selected) {
node.data.$color = "#dddddd";
} else {
delete node.data.$color;
}
},
onBeforePlotLine: function(adj){
if (adj.nodeFrom.selected && adj.nodeTo.selected) {
adj.data.$color = "#33CC33";
adj.data.$lineWidth = 5;
} else {
delete adj.data.$color;
delete adj.data.$lineWidth;
}
}
问题是,当我调用ST.select()
高亮显示叶节点时,该级别下的所有子节点都被折叠/隐藏
为了了解这一点,我上传了几个示例:
如果浏览器窗口有点小,可能需要向下滚动 所以我的问题是,如何在JavaScript InfoVis中显示从叶节点到根节点的节点,而不折叠级别3的子节点(级别1是根节点)
如果有一种方法可以找到我的Leave节点并将树遍历回根目录(在途中设置样式),那么我很乐意这样做好吧,在深入研究了所有代码之后,我找到了它,将它与console.log()调用和断点混在一起 它与inital
onClick
调用、图形作为后台运行的更新循环以及除onClick
之外的所有内容似乎都忽略了图形的busy
状态有关
发生了什么
onClick
被调用并触发一系列事件,其中一部分是异步的select
或多或少是同步的,并执行其工作onClick
最终完成,它的一个副作用是重新扩展图形select
已经设置了clickedNode
,现在onClick
使用新设置的值并拧紧选择
,以便它尊重图形的繁忙状态:
select: function(id, onComplete) {
var that = this;
if (this.busy) {
window.setTimeout(function() {
that.select(id, onComplete);
}, 1);
return;
}
// original select code follows here (remove the old var that = this; assignment)
仅此而已,我们只需检查忙状态并延迟选择,直到它为false
。
除了从外部调用的onClick之外,这也应该应用于所有其他函数,这里的库设计器在指示哪些函数有副作用,哪些没有副作用方面做得很糟糕。您是否尝试在ST的属性中设置“constrated:false”?这为我解决了问题
再次感谢您,您是一位明星!