删除d3图节点会留下余数

时间:2017-06-24 05:59:01

标签: javascript d3.js force-layout directed-graph

我正在编写一个基本的有向图编辑器并从JSON加载初始图。

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

我的理解是link.exit().remove(); 应删除与我当前数据集不匹配的任何链接:

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

我的示例链接:

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

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

任何想法都会非常感激!

修改

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

1 个答案:

答案 0 :(得分: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
    });
  }