我有几个网络(节点+链接)存储在单独的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);
});
};
答案 0 :(得分:1)
请参阅https://github.com/mbostock/d3/wiki/Force-Layout#wiki-start
#force。开始()
开始模拟;在分配节点和链接之后,必须在首次创建布局时调用此方法。此外,只要节点或链接发生变化,就应该再次调用它。 [...]