I have a graph with a “logical” representation in a json (that I use for another program) and the graphical representation is in an MxGraph, rendered in the Angular component.
I am using XMLs as values of the cells, as suggested in this Documentation.
While for me it is very easy to intercept changes in the mxgraph and update the json, I am not able to propagate changes in the json in the graph.
A stupid example is if I change the value of a “label”. I can do this:
editor.graph.model.cells[2].value.setAttribute('label', "Test");
But this change is visible only when another updated happens (e.g., moving the cell in the graph).
I tried to fire an mxEvent.CHANGE event, but I wasn’t able to properly set the edits and changes so that they propagate to the graph. I tried also to create a new mxGeometryChange, but I failed again…
Thanks in advance for any hint…
Advertisement
Answer
I found a solution, even if I cannot use it… Here is the function I added:
// To use it call:
// graph.updateCell(cell, "newlabel");
graph.updateCell = function(cell, label)
{
if (cell !== null) {
cell.value.setAttribute('label', label);
this.model.beginUpdate();
try
{
//this.cellUpdated(cell);
this.model.setValue(cell, cell.value);
this.fireEvent(new mx.mxEventObject(mx.mxEvent.LABEL_CHANGED,
'cell', cell, 'ignoreChildren', false));
}
finally
{
this.model.endUpdate();
}
return cell;
} else return null;
};
My issue is that I cannot use this function, but at this point the question is different. The reason is that I would like to use this function from another component which is not running the mxgraph and that’s my struggle now… That becomes then a question about Angular ngModel forward and backward references… I will probably ask it on another post…