2013-12-16 67 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:无法调用未定义的方法'调用'。我将在原文中详细介绍上述内容。 –