Durante la scrittura di GoJS abbiamo risolto questo problema con le seguenti regole per i dati:
- Ogni nodo ha un
key
, che deve essere univoco
- I collegamenti possono essere rappresentati in due modi: in modo Tree-like (TreeModel) o come entità oggetto JSON separate (GraphLinksModel)
Se il diagramma di flusso o diagramma viene creato in modo Tree, con un solo genitore per nodo, non è necessario separare i dati JSON per i collegamenti. Invece, ogni nodo può specificare il proprio key
ma anche la sua chiave genitore (come parent
o qualche altro identificatore), e questo ti dà abbastanza informazioni per rendere ogni link nel grafico.
Alcuni esempi semplificati di JSON per un TreeModel (da Editor organigramma ). Il JSON per i nodi descrive ciascuno con una chiave e descrive la relazione genitore con un'altra chiave:
{"key":"1", "name":"Stella" },
{"key":"2", "name":"Luke", "parent":"1"},
{"key":"3", "name":"Meg", "parent":"2"},
L'altro modo è di avere ogni link rappresentato dal proprio oggetto JSON, ma a differenza dei nodi, i collegamenti non hanno effettivamente bisogno di avere i propri valori di key
, devono solo avere un to
e from
valore che specifica le due chiavi del nodo a cui il collegamento si connette.
L'esempio State Chart utilizza un GraphLinksModel, quindi un oggetto JSON per ogni nodo e ciascun link:
"nodeDataArray": [
{ "id": 0, "text": "Initial" },
{ "id": 1, "text": "First down" },
{ "id": 2, "text": "First up" }
],
"linkDataArray": [
{ "from": 0, "to": 0, "text": "up or timer" },
{ "from": 0, "to": 1, "text": "down" },
{ "from": 1, "to": 0, "text": "up (moved)" },
...
Ciò consente più genitori, più collegamenti tra nodi, connessioni a due vie, ecc.