2013-12-16 71 views
1

我有幾個網絡(節點+鏈接)存儲在單獨的JSON文件中。我將它們加載到D3.js中的Force Layout中,並單獨加載和佈局。但是,我想添加在同一頁面上加載任何文件(一次一個)的功能,並且每當從JSON文件加載新網絡時,都會重新開始強制佈局。D3.js:從JSON文件加載多個網絡w/Force佈局

如何從JSON文件加載新網絡時重新啓動Force Layout?我發現最近的是http://bl.ocks.org/mbostock/1093130,但只適用於單個文件。

奇怪的相關錯誤?

我注意到了一些關於部隊佈局的特殊情況。如果我每1秒鐘在JSON文件之間快速切換,Force Layout會繼續正確地鋪設它們。如果我在切換之前等待幾秒鐘,那麼Force Layout似乎會在第二個網絡的最終佈局上得到解決,然後停止佈局其餘的網絡。

更多關於上述細節:我意識到當力佈局失敗,我發現了一個意外的錯誤:

Uncaught TypeError: Cannot call method 'call' of undefined 

的錯誤似乎是內部D3.js,在下面幾行:

d3_selectionPrototype.each = function(callback) { 
    return d3_selection_each(this, function(node, i, j) { 
     callback.call(node, node.__data__, i, j); 
    }); 
}; 

回答

1

參見https://github.com/mbostock/d3/wiki/Force-Layout#wiki-start

# force.start()

Starts the simulation; this method must be called when the layout is first created, after assigning the nodes and links. In addition, it should be called again whenever the nodes or links change. [...]

+0

我執行'force.nodes(graph.nodes).links(graph.links) .start();'(其中'graph'是網絡數據)每次從JSON文件加載數據後。它似乎仍然被鎖定在某種東西上。 –

+0

噢,好的。如果每次載入新數據時初始化新的'd3.layout.force()',它都能正常工作嗎? – dechov

+0

也沒有骰子。儘管我剛剛意識到每次強制佈局失敗時都會拋出錯誤:未捕獲的TypeError:無法調用未定義的方法'調用'。我將在原文中詳細介紹上述內容。 –