如何以编程方式更改mxCell值?

时间:2019-11-19 09:22:12

标签: javascript typescript angular7 mxgraph

我在json(我用于另一个程序)中有一个带有“逻辑”表示的图形,图形表示在Angular组件中呈现的MxGraph中。

我正在使用XML作为单元格的值,如本Documentation中所建议。

虽然对我来说,截获mxgraph中的更改并更新json非常容易,但我无法在图中的json中传播更改。

一个愚蠢的例子是,如果我更改“标签”的值。我可以这样做:

editor.graph.model.cells[2].value.setAttribute('label', "Test");

但是只有在发生另一个更新(例如,移动图形中的单元格)时,此更改才可见。

我试图触发一个mxEvent.CHANGE事件,但是我无法正确设置编辑和更改,以便它们传播到图形。我也尝试创建一个新的mxGeometryChange,但又失败了...

在此先感谢您的提示...

2 个答案:

答案 0 :(得分:0)

即使我无法使用它,我也找到了解决方案...这是我添加的功能:

    // 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;
    };

我的问题是我无法使用此功能,但此时的问题有所不同。原因是我想从另一个未运行mxgraph的组件中使用此函数,这就是我现在的工作...那便成为有关Angular ngModel向前和向后引用的问题...我可能会在另一个问题上提出发布...

答案 1 :(得分:0)

解决方案对我有用。

我们应该使用mxGraphModel.setValue。 然后,更改就可见了。

mxCell.setValue无法显示。

谢谢!