如何防止Javascript InfoVis SpaceTree`ST.select()`方法崩溃节点?

如何防止Javascript InfoVis SpaceTree`ST.select()`方法崩溃节点?,javascript,visualization,charts,infovis,Javascript,Visualization,Charts,Infovis,我正在使用JavaScript InfoVis工具包,尤其是可视化 我需要展开所有树,然后显示从特定叶节点返回根节点的路径 我已经把树很好地展开了,但是选择叶节点并突出显示返回根的路径给我带来了一些问题 我正在使用ST.select(node,onComplete)函数来选择我感兴趣的叶节点,实际上,返回根节点的路径(线和节点)会高亮显示 为此,我实施了onBeforePlotNode和onBeforePlotLineST.Controller方法,以允许我将节点高亮显示回根节点及其绘图线: o

我正在使用JavaScript InfoVis工具包,尤其是可视化

我需要展开所有树,然后显示从特定叶节点返回根节点的路径

我已经把树很好地展开了,但是选择叶节点并突出显示返回根的路径给我带来了一些问题

我正在使用
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”?这为我解决了问题


    再次感谢您,您是一位明星!