2017-06-24 121 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 
    }); 
    }