Árboles
Para estructuras jerárquicas, usa un campo parent en los datos y TreeLayout
para ordenar el árbol.
Jerarquía con parent
Sección titulada «Jerarquía con parent»Los datos usan parent para indicar el nodo padre:
{ key: 4, parent: 2, label: 'Nivel 3a' }TreeLayout ordena automáticamente según la profundidad.
Navegación de árbol
Sección titulada «Navegación de árbol»diagram.findTreeRoots()— nodos sin padre.node.findTreeParentNode()— el padre.node.findTreeChildrenNodes()— los hijos.node.isTreeLeaf()— sin hijos.
Expandir / colapsar
Sección titulada «Expandir / colapsar»Para colapsar un subárbol (ocultar todos sus descendientes) sin necesidad de
que los nodos sean un Group, usa node.isTreeExpanded junto con
diagram.collapseTree/expandTree:
node.isTreeExpanded; // true por defectodiagram.collapseTree(node); // oculta todos los descendientes de nodediagram.expandTree(node); // los vuelve a mostrar (respetando los que// a su vez estén colapsados en un nivel inferior)Estas operaciones disparan los eventos TreeCollapsed/TreeExpanded del
diagrama.
Esto es independiente de Group.isSubGraphExpanded +
collapseGroup/expandGroup (ver Grupos), que colapsa la
pertenencia a un grupo en vez de la jerarquía de árbol.
TreeExpanderButton
Sección titulada «TreeExpanderButton»TreeExpanderButton() construye un botón (“−”/“+”) listo para añadir al
template de un nodo; al pulsarlo llama a collapseTree/expandTree sobre el
nodo que lo contiene:
import * as go from 'graphojs/go';import { TreeExpanderButton } from 'graphojs';
const $ = go.GraphObject.make;
diagram.nodeTemplate = $( go.Panel, 'Horizontal', $(go.Panel, 'Auto', $(go.Shape, 'RoundedRectangle'), $(go.TextBlock, new go.Binding('text', 'label'))), TreeExpanderButton(), // { size, background, stroke } opcionales);TreeExpanderButton/PanelExpanderButton no forman parte del namespace
go.* (tampoco en GoJS real, donde viven en el módulo de extensiones): se
importan directamente desde graphojs.