我工作的一個簡單的D3力導向佈局的基礎上,Modifying a Force Layout例如,使用setTimeout
回調的正常工作,採用更新的硬編碼的數據:修改強制佈局 - 使用索引,而不是引用給類型錯誤
然而,我將被動態地從服務器作爲JSON加載數據,所以想進入nodes
陣列鏈路source
和target
被指定爲索引,而不是實際的JavaScript節點對象的引用。該選項在documentation中描述;
注意:源和目標屬性的值最初可以是 指定爲節點數組中的索引;這些將在撥打電話後被替換爲 引用。
作爲第一步,我嘗試修改示例以使用索引;在下面的代碼片段:
var a = {id: "a"}, b = {id: "b"}, c = {id: "c"};
nodes.push(a, b, c);
links.push({source: a, target: b},{source: a, target: c},{source: b, target: c});
start(); // joins the data, (re)starts the d3.layout.force
我改變只是一個單一的線使用索引到的節點如下:
links.push({source: 0, target: 1},{source: 0, target: 2},{source: 1, target: 2});
然而,這會導致JavaScript錯誤從d3.v3.min.js
(火狐35.0.1) :
TypeError: u is undefined
和圖形僅部分創建的 - 所有3個節點被示出,但只有一個鏈接:
是否可以以這種方式使用索引?
你想要的是肯定可能的。請參閱http://jsdatav.is/visuals.html?id=11550728。不知道你是如何觸發佈局。你只是在運行一個勾號? – 2015-02-24 16:57:12
我以正常的方式將'tick'函數綁定到'd3.layout.force',如http://bl.ocks.org/mbostock/1095795所示,所以有多個ticks,圖形是動畫,即使它創建不正確。 – DNA 2015-02-24 17:00:58
我錯過了開始佈局後更改數據的事實。拉斯是對的;你不能那樣做。 – 2015-02-24 17:58:41