为了帮助您入门,click
代码中的函数是解决此问题的关键。
现在它看起来像这样:
function click(d) {
if (d.children) {
d._children = d.children;
d.children = null;
} else {
d.children = d._children;
d._children = null;
}
update();
}
这仅通过在两个不同的数组之间移动它们来隐藏/显示结构中的节点:children
当它们可见时;_children
当他们不是。
您可能想尝试的是:
确保在您的 JSON 数据中,每个node
对象都有一个filename: _fileNameString_
对象。(就像你name: _nodeName_
现在在你正在加载的 JSON 中一样)
然后,您的click
函数必须执行以下操作:
function click(d) {
if (d.children) {
d._children = d.children;
d.children = null;
} else if (!d.children && !d._children) {
var nameOfTheFile = d.filename;
var childObject = d3.json(nameOfTheFile);
d.children.push(childObject);
} else {
d.children = d._children;
d._children = null;
}
update();
}
请注意,我没有对此进行测试,所以我不确定它是否有效,但我认为这种方法可能是可行的。
编辑:
另请注意,这假设您的整个数据已经分布在多个文件中。因此,flare.json
文件或您首先用来加载第一个 JSON 数据的任何文件都具有以下结构:
{
"name": "flare",
"filename": "children1.json",
"children": [ ]
}
children1.json
可能是这样的:
[
{
"name": "cluster",
"filename": "children2.json",
"children": [ ]
},
{
"name": "graph",
"filename": "children3.json",
"children": [ ]
},
{
"name": "optimization",
"filename": "children4.json",
"children": [ ]
}
]
依此类推...底线,您已经必须以某种方式将数据分布在这些文件中,并具有您想要/需要的结构。