Javascript D3.js:折叠/展开时更新放射状树中元素之间的链接
这是一个后续行动 我使用Mike Bostock在中找到的部分代码成功地添加了元素之间的链接,并将它们添加到radial版本的: 可以在底部找到“packageImport”函数 现在,每当我折叠/展开一个元素时,我都会尝试更新这些链接,但我不知道如何操作。它可能与以下部件或位置更改时更新功能内的部件有关: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;
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);