删除 d3 图节点留下剩余的行
Deleting d3 graph nodes leaves lines remaining
我正在编写一个基本的有向图编辑器并从 JSON 加载初始图。
我的问题是删除节点经常会留下剩余的行(通常与我要删除的节点完全无关 - 您可以通过遍历并删除一堆节点来复制它)。其余工件也不随力布局移动。
我的理解是link.exit().remove();
应该删除任何与我当前数据集不匹配的 links:
link = link.data(links,function(d){return d.source.Id + "_" + d.target.Id;});
A link 我的样本:
https://jsfiddle.net/slizice/9a8d6zsm/60/
(点击一个节点并点击 delete
/backspace
删除)
直到我开始使用更大的数据集,我才注意到这一点。
如有任何想法,我们将不胜感激!
编辑:
看起来有些重复的 link 可能是罪魁祸首。一旦我有解决方案,我会 post 给出答案。
看起来我生成链接的服务器端代码在某些情况下会多次遍历它们,生成重复项。
为了在客户端处理重复项,我只是先检查数组:
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
});
}
我正在编写一个基本的有向图编辑器并从 JSON 加载初始图。
我的问题是删除节点经常会留下剩余的行(通常与我要删除的节点完全无关 - 您可以通过遍历并删除一堆节点来复制它)。其余工件也不随力布局移动。
我的理解是link.exit().remove();
应该删除任何与我当前数据集不匹配的 links:
link = link.data(links,function(d){return d.source.Id + "_" + d.target.Id;});
A link 我的样本:
https://jsfiddle.net/slizice/9a8d6zsm/60/
(点击一个节点并点击 delete
/backspace
删除)
直到我开始使用更大的数据集,我才注意到这一点。
如有任何想法,我们将不胜感激!
编辑:
看起来有些重复的 link 可能是罪魁祸首。一旦我有解决方案,我会 post 给出答案。
看起来我生成链接的服务器端代码在某些情况下会多次遍历它们,生成重复项。
为了在客户端处理重复项,我只是先检查数组:
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
});
}