2017-06-24 75 views
1

我在写一个基本的有向图编辑器,并从JSON加载初始图形。删除d3图形节点留下剩余的线条

我的问题是,经常删除节点会留下剩余的行(通常与我正在删除的节点完全无关 - 您可以通过删除一堆节点来复制此节点)。剩下的工件也不随着力布局而移动。

我的理解是,link.exit().remove(); 应该删除不符合我目前的数据集的任何链接:

link = link.data(links,function(d){return d.source.Id + "_" + d.target.Id;}); 

链接到我的样品:

https://jsfiddle.net/slizice/9a8d6zsm/60/ (点击一个节点和命中delete/backspace删除)

我没有观察到这一点,直到我开始使用更大的数据集。

任何想法将不胜感激!

编辑:

看起来有些重复的链接可能是负责任的。一旦我有解决方案,我会发布一个答案。

回答

0

看起来像我的服务器端代码,在某些情况下,生成链接会多次遍历它们,从而生成重复链接。

为了处理在客户端重复,我简单首先检查阵列:

exists = false; 
    edges.forEach(function(e) { 
    if ((e.source.Id == sourceNode.Id) && (e.target.Id == targetNode.Id)) { 
     exists = true; 
    } 
    }); 
    if (!exists) { 
    edges.push({ 
     source: sourceNode, 
     target: targetNode, 
     value: e.Value 
    }); 
    }