0

我正在使用 D3js 到 Tree Layout 来呈现一些数据,这里的工作结果:

http://jsfiddle.net/chrisloughnane/vV3Sc/

我想学习如何正确导航树中的节点。因此,例如,我可以设置一个函数来将所有节点设置为通过单击打开/关闭,或者可能有一个类别索引,以便访问者可以单击year one并且该节点和所有子节点都将设置为打开。

我已经浏览了代码,但我无法理解

function toggleAll(d) {
    if (d.children) {
        d.children.forEach(toggleAll);
        toggle(d);
    }
}

root.children.forEach(toggleAll);

对我来说,我用 the 调用函数,root然后如果传递的节点有每个children我传递给它的函数名?!当没有更多时,即它已达到 a时,它将值从to或反转切换。childnodechildrenleafchildren_children

当我通过 forEach 时发生了什么toggleAll

4

2 回答 2

2

这里的关键是forEach,这是一个原生 javascript 函数。(这里的文档)

此方法为数组的每个元素执行回调 ( toggleAll)。参数将d通过 传递给toggleAll函数forEach。所以它不是来自关闭。

现在,由于再次调用 toggleAll forEach,它确实进入到树的下一层的递归模式,直到d.children为空。

于 2013-04-19T09:18:49.940 回答
0

如果您不了解正在发生的事情,您是如何生成此工作代码的?

当我传递它toggleAll时会发生什么?

你明白这个问题中的“它”指的是什么吗?

无论如何,您正在使用 JavaScript 数组(或至少是类似数组的东西),您正在调用forEach方法,该方法接受一个函数并在每个元素上调用该函数。因此,当您第一次调用 forEach on 时root.childrentoggleAll会调用数组中的每个元素root.children。然后,您再次(现在递归地)为任何后续子节点调用 forEach。

于 2013-04-19T09:21:11.447 回答