D3.js:从强制布局的JSON文件加载多个网络

时间:2013-12-16 02:53:45

标签: javascript json d3.js social-networking force-layout

我有几个网络(节点+链接)存储在单独的JSON文件中。我将它们加载到D3.js中的Force Layout中,然后单独加载和布局。但是,我希望添加在同一页面上加载任何文件的功能(一次一个),并在从JSON文件加载新网络时重新启动Force Layout。

从JSON文件加载新网络时,如何重新启动强制布局?我发现的最接近的是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 个答案:

答案 0 :(得分:1)

请参阅https://github.com/mbostock/d3/wiki/Force-Layout#wiki-start

  

#force。开始()

     

开始模拟;在分配节点和链接之后,必须在首次创建布局时调用此方法。此外,只要节点或链接发生变化,就应该再次调用它。 [...]