Data-gebeurtenisbus
Los van interactie-callbacks verzendt de grafiek een getypte data-gebeurtenisbus voor alles dat veranderingen — nodeAdd, nodeRemove, edgeAdd, edgeRemove, nodeChange, dataBatchChanged en meer. Abonneer je met graph.on(event, fn) en meld je af met graph.off(event, fn). Dit is de naad voor volharding, ongedaan maken of de grafiek synchroniseren met uw backend.
De knoppen muteren de grafiek; het logboek toont de gebeurtenissen die als reactie worden geactiveerd - inclusief de cascade waarbij het verwijderen van een knooppunt ook de rand ervan verwijdert.
Een knooppunt toevoegen of verwijderen om gebeurtenissen te activeren...
js
// The data event bus fires whenever the graph's data changes — whether the
// change came from your code, the built-in UI, or the editing tools. Subscribe
// with graph.on(...); the returned function tears the listeners back down with
// graph.off(...).
function registerEvents(graph, onEvent) {
const onNodeAdd = (node) => onEvent('nodeAdd', node.id)
const onNodeRemove = (node) => onEvent('nodeRemove', node.id)
const onEdgeAdd = (edge) => onEvent('edgeAdd', edge.id)
const onEdgeRemove = (edge) => onEvent('edgeRemove', edge.id)
const onBatch = (changes) => onEvent('dataBatchChanged', `${changes.length} change(s)`)
graph.on('nodeAdd', onNodeAdd)
graph.on('nodeRemove', onNodeRemove)
graph.on('edgeAdd', onEdgeAdd)
graph.on('edgeRemove', onEdgeRemove)
graph.on('dataBatchChanged', onBatch)
return () => {
graph.off('nodeAdd', onNodeAdd)
graph.off('nodeRemove', onNodeRemove)
graph.off('edgeAdd', onEdgeAdd)
graph.off('edgeRemove', onEdgeRemove)
graph.off('dataBatchChanged', onBatch)
}
}js
let seq = 0
const added = []
// Adding a node + its edge fires nodeAdd, edgeAdd and dataBatchChanged.
function addNode(graph) {
const id = `node-${++seq}`
graph.addNode({ id })
graph.addEdge({ from: 'hub', to: id })
added.push(id)
graph.simulation.reheat(0.6)
}
// Removing a node also removes its connected edge — so a single call fires
// nodeRemove *and* edgeRemove.
function removeNode(graph) {
const id = added.pop()
if (id) {
graph.removeNode(id)
graph.simulation.reheat(0.4)
}
}js
const data = {
nodes: [
{ id: 'hub' },
{ id: 'a' },
{ id: 'b' },
{ id: 'c' }
],
edges: [
{ from: 'hub', to: 'a' },
{ from: 'hub', to: 'b' },
{ from: 'hub', to: 'c' }
]
}