将节点异步添加到d3.hierarchy

时间:2016-08-23 08:33:39

标签: javascript d3.js d3.js-v4

我正在用D3(v4)编写一个树来显示特定类型的数据,其中结构具有非常多的级别。因此,我决定异步加载每个新级别的数据:当用户点击一个节点时,我加载异步它的子节点。

我达到了预期的效果,但我不确定这是最好的方法,因为我觉得我正在改写方向盘。有人可以确认我的代码或告诉我更好的方式来满足我的需求吗?我在互联网上找不到关于d3和这种异步的一切......

这是简化的代码:

树初始化

00 00

点击代码

// Starting data
var data = {
    "name": "node1",
    "children": [{
        "name": "child1",
        "children": []
    }, { 
        "name": "child2",
        "children": []
    }]
};
// Tree creation
var root = d3.hierarchy(data);

我期望某种自动化来简化这段代码(主要是添加节点而不用担心树的每个属性的更新)。

Ps:我试图重新创建整个树,将新数据添加到初始数据并重新调用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 children children.forEach(function(dchild, index) { //Building 'Node' objects and adding them to children nodeData.children[index] = makeD3Node(dchild, d, index); }); //Updating all height attributes updateHeightAttributeRecursively(d); callback(); }, 100) } function makeD3Node(data, parent, index) { //I have to use d3.hierarchy because d3 Node constructor is not public var node = d3.hierarchy(data); node.parent = parent; node.depth = parent.depth + 1; node.children = null; node.data = data; node.height = 0; node.id = parent.id + '' + index; //updating my other attributes... return node; } ,但它会激活我的动画。

提前致谢!

0 个答案:

没有答案