Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript D3.js:折叠/展开时更新放射状树中元素之间的链接_Javascript_Css_D3.js_Tree_Geometry - Fatal编程技术网

Javascript D3.js:折叠/展开时更新放射状树中元素之间的链接

Javascript D3.js:折叠/展开时更新放射状树中元素之间的链接,javascript,css,d3.js,tree,geometry,Javascript,Css,D3.js,Tree,Geometry,这是一个后续行动 我使用Mike Bostock在中找到的部分代码成功地添加了元素之间的链接,并将它们添加到radial版本的: 可以在底部找到“packageImport”函数 现在,每当我折叠/展开一个元素时,我都会尝试更新这些链接,但我不知道如何操作。它可能与以下部件或位置更改时更新功能内的部件有关: function click(d) { if (d.children) { d._children = d.children; d.children = null;

这是一个后续行动

我使用Mike Bostock在中找到的部分代码成功地添加了元素之间的链接,并将它们添加到radial版本的:

可以在底部找到“packageImport”函数

现在,每当我折叠/展开一个元素时,我都会尝试更新这些链接,但我不知道如何操作。它可能与以下部件或位置更改时更新功能内的部件有关:

function click(d) {
  if (d.children) {
    d._children = d.children;
    d.children = null;
  } else {
    d.children = d._children;
    d._children = null;
  }

  update(d);
}
此外,值得一提的是,删除以下行将生成另一个正确的布局,并且没有子级折叠:

root.children.forEach(collapse);
update(root);
出于这个原因,我不明白为什么单击函数后的更新没有考虑新的布局

请随意编辑


另一种可能性是,内部级别不移动,并且始终设置为所有扩展大小的间距,因此第二个级别只会出现或消失,而不会更改第一个级别,并且仍然适合。您可以建议将此解决方案作为答案,但它仍然是方案B。

您实际上并没有更新它们的值。下面的代码所做的只是更新新的链接,而您没有这些链接

svg.selectAll("path.middleLink")
.data(bundle(middleLinks))
.enter().append("path")
.attr("class", "middleLink")
.attr("d", line);
您可以通过更新现有链接和新链接来更正此问题

var middle = svg.selectAll("path.middleLink")
  .data(bundle(middleLinks));
middle.enter().append("path")
  .attr("class", "middleLink")
  .attr("d", line);
middle.attr("d", line);

您实际上并没有更新它们的值。下面的代码所做的只是更新新的链接,而您没有这些链接

svg.selectAll("path.middleLink")
.data(bundle(middleLinks))
.enter().append("path")
.attr("class", "middleLink")
.attr("d", line);
您可以通过更新现有链接和新链接来更正此问题

var middle = svg.selectAll("path.middleLink")
  .data(bundle(middleLinks));
middle.enter().append("path")
  .attr("class", "middleLink")
  .attr("d", line);
middle.attr("d", line);