我正在用D3(v4)写一棵树,以显示一种特殊类型的数据,其中结构具有很多级别。因此,我决定异步加载每个新级别的数据:当用户单击节点时,我会异步加载其子级。
我达到了预期的结果,但是我不确定这是最好的方法,因为我感觉自己在重写方向盘。有人可以确认我的代码或告诉我一种更好的方式来满足我的需求吗?我在互联网上找不到关于d3和这种异步性的任何信息...
这是简化的代码:
树初始化
// Starting data
var data = {
"name": "node1",
"children": [{
"name": "child1",
"children": []
}, {
"name": "child2",
"children": []
}]
};
// Tree creation
var root = d3.hierarchy(data);
Run Code Online (Sandbox Code Playgroud)
点击代码
function click(d) {
loadChildrenFromServer(d, fooCallback);
}
function loadChildrenFromServer(d, callback) {
//Simulating server call
setTimeout(function () {
//Mock async data
var mockchildren = [{
"name": "asyncChild1",
"children": []
}, {
"name": "asyncChild2",
"children": []
}];
d.data.children = children; //Updating data
d.children = []; //Initializing d3 node …Run Code Online (Sandbox Code Playgroud)