У меня есть разборное дерево 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);
}
Буду очень признателен, если кто-нибудь укажет, где моя ошибка, или любой другой лучший подход.