【发布时间】:2019-03-02 16:30:44
【问题描述】:
我有 d3 可折叠树。我有控制树的扩展和折叠的外部按钮。我可以全部展开,全部折叠。而且,我可以一次扩展一个级别。我无法一次折叠一个级别。
对于没有事先了解 d3 的任何人。 如果节点展开,则 d.children 不为空 & d.children 为空,如果节点折叠 d.children 不为空且 d.children 为空。
这是我扩展一级的逻辑:
private expandNodeOneLevel(d) {
var children = (d.children) ? d.children : d._children;
if (!d.children) {
if (children) {
d.children = d._children;
d._children = null;
}
return;
}
if (children) {
children.forEach((node) => this.expandNodeOneLevel(node));
}
}
public expandOneLevelNodes() {
this.expandNodeOneLevel(this.root);
this.update(this.root);
}
这是我一次折叠一层的逻辑,这是错误的,因为它会折叠所有树节点。我很难打破递归。
private collpaseOneLevelNodes = (d) => {
var children = (d.children) ? d.children : d._children;
if (!children) {
return;
}
children.forEach((node) => {
this.collpaseOneLevelNodes(node);
});
if (d.children) {
d._children = d.children;
d.children = null;
}
return;
}
public collapseOneLevel() {
this.collpaseOneLevelNodes(this.root);
this.update(this.root);
}
如果有人指出我的错误在哪里或任何其他更好的方法,我将不胜感激。
【问题讨论】:
标签: javascript algorithm typescript d3.js tree