2016-01-28 74 views
0

我有一個很好的摺疊力佈局,從http://bl.ocks.org/mbostock/1093130開始摺疊。d3.js可摺疊的力圖 - 爲唯一的ID分配相同的節點

這是我的例子:http://plnkr.co/edit/rqh8SD?p=preview

它運作良好,當所有的節點都具有唯一的名稱(http://plnkr.co/edit/E1n6asBM5VfX2vjGPkKO?p=preview),但只要一些節點具有相同的名稱(不幸的是我需要的),塌陷不起作用正常。

任何人都可以幫助我爲節點的相同名稱分配唯一的ID?我相信這段代碼可以訣竅,但我不知道在哪裏插入它。

node.each(function(d,i){ // use i to iterate through 
    d.uniqueID = uniqueNode + i; 
} 

我試圖在我之前的線程D3.js Collapsible Force Layout, collapsed by default解決這個問題 - 不成功。

任何幫助表示讚賞!

回答

0

做這樣的事情,使所有的節點獨特應該工作。剛過您彙整的節點,我建議這樣做,但你插入力之前他們向圖:

功能的更新(d){

var nodes = flatten(root), 
    links = d3.layout.tree().links(nodes); 

nodes.each(function(d, i) { d.uniqueID = i; }); 

// Restart the force layout. 
force 
    .nodes(nodes) 
    .links(links) 
    .start(); 

您還需要更新您的鑰匙功能這些節點

// Update nodes 
    node = node.data(nodes, function(d) { return d.uniqueID; }); 

你需要採取但是請注意,如果你改變你的數據,你的綁定可能是錯誤的使用.data()時。如果你要插入一個新值,那麼將會把所有索引都加1,這可能會導致你在未來將數據加入到錯誤的元素中。

解決該問題的一種可能的不同方式可能是更改您的關鍵功能以查看直接父母(或父母)的ID。