我正在使用其中一個強制佈局示例(http://bl.ocks.org/1153292)在我的網站上顯示網絡。如何在底層數據更改時更新D3強制佈局的元素
我允許用戶選擇在任何給定時間查看哪種類型的鏈接。我注意到,當我選擇查看鏈接類型A時,然後添加鏈接類型B,然後刪除鏈接類型A,類型B的剩餘鏈接以A顏色呈現。
這是將鏈接添加到svg圖的代碼。我正在通過添加和刪除鏈接來更改數組this.links
。正如你可以看到我設置類屬性,但它並沒有更新 - 它仍然類型的鏈接A.的
var path = svg.append("svg:g")
.selectAll("path")
.data(this.links)
.enter()
.append("svg:path")
.attr("class", function(d) { return "link " + d.type; })
.attr("marker-end", function(d) { return "url(#" + d.type + ")"; });
我目前通過更新蜱函數內部的階級屬性,解決此問題,但這種偏離航線的原因很多不需要的工作。
我讀到enter操作返回存在的元素的合併選擇,也是新的,因此attr操作應該更新存在的元素並設置新元素。
我錯過了什麼?
Ido,我知道這是一箇舊帖子,但我相信我遇到了和你一樣的問題,但我仍然不明白這個解決方案。你能否解釋它是如何工作的 - 它如何解決你最初的問題?謝謝。 – Mars
該解決方案的工作原理是因爲cx和cy的attr更新在enter()上下文之外,所以它們每次都會發生。在原始代碼中,attr函數在enter()上下文中調用,所以它們只根據對象標識創建一次。對我來說,它是作爲data()的第二個參數來學習關鍵函數的:http://bost.ocks.org/mike/constancy/ – velotron