新しい頂点を既存の mxgraph グラフに挿入するときに問題が発生します。
デフォルトのコーデックを使用して、グラフ モデル全体を正常にシリアライズ/デシリアライズできます。ただし、個々の頂点を既存のグラフに挿入できるようにしたいと考えています。頂点は、mxgraph XML 文字列の JSON 配列として表されます。最初の要素はメインの頂点であり、後続のすべての要素はポートです。
["<mxCell id=\"47\" style=\"Zerply\" vertex=\"1\" connectable=\"0\" parent=\"1\">
<Object type=\"component\" label=\"Zerply\" attribute1=\"value1\" as=\"value\"/>
<mxGeometry x=\"573\" y=\"224\" width=\"150\" height=\"110\" as=\"geometry\"/>
</mxCell>",
"<mxCell id=\"48\" style=\"ZerplyInputLeft\" vertex=\"1\" parent=\"47\">
<Object type=\"port\" label=\"label 2\" attribute1=\"value1\" as=\"value\"/>
<mxGeometry y=\"0.5\" width=\"10\" height=\"10\" relative=\"1\" as=\"geometry\">
<mxPoint x=\"-5\" y=\"-5\" as=\"offset\"/>
</mxGeometry>
</mxCell>",
"<mxCell id=\"49\" style=\"ZerplyOutputRight\" vertex=\"1\" parent=\"47\">
<Object type=\"port\" label=\"label 2\" attribute1=\"value1\" as=\"value\"/>
<mxGeometry x=\"1\" y=\"0.25\" width=\"10\" height=\"10\" relative=\"1\" as=\"geometry\">
<mxPoint x=\"-5\" y=\"-5\" as=\"offset\"/>
</mxGeometry>
</mxCell>",
"<mxCell id=\"50\" style=\"ZerplyOutputRight\" vertex=\"1\" parent=\"47\">
<Object type=\"port\" label=\"label 2\" attribute1=\"value1\" as=\"value\"/>
<mxGeometry x=\"1\" y=\"0.75\" width=\"10\" height=\"10\" relative=\"1\" as=\"geometry\">
<mxPoint x=\"-5\" y=\"-5\" as=\"offset\"/>
</mxGeometry>
</mxCell>"]
そして、頂点をグラフに挿入しようとする簡単なコードを次に示します。
var componentNode;
for (var i = 0; i < xmlArray.length; i++) {
var mxXML = xmlArray[i];
var xmlDocument = mxUtils.parseXml(mxXML);
var decoder = new mxCodec(xmlDocument);
var node = xmlDocument.documentElement;
var newCell = decoder.decode(node);
if (i == 0) {
vertex = graph.insertVertex(root, null, newCell, x, y, 150, 110,
this.dragElement.id);
componentNode = vertex;
} else {
componentNode.insert(newCell);
}
vertex.connectable = 0;
}
これにより、頂点 (およびそのサブ頂点/ポート) が既存のグラフに正常に挿入されます。次に、新しいグラフをシリアル化しようとすると問題が発生します。最初の頂点に追加の子ノードが取得されます。
<mxGraphModel>
<root>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
<mxCell id="2" style="Zerply" vertex="1" connectable="0">
<Object type="component" label="Zerply" attribute1="value1" as="value"/>
<mxGeometry x="573" y="224" width="150" height="110" as="geometry"/>
**<mxCell style="Zerply" vertex="1" parent="1">
<mxGeometry x="615" y="252" width="150" height="110" as="geometry"/>
</mxCell>**
</mxCell>
<mxCell id="48" style="ZerplyInputLeft" parent="2" vertex="1">
<Object type="port" label="label 2" attribute1="value1" as="value"/>
<mxGeometry y="0.5" width="10" height="10" relative="1" as="geometry">
<mxPoint x="-5" y="-5" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="49" style="ZerplyOutputRight" parent="2" vertex="1">
<Object type="port" label="label 2" attribute1="value1" as="value"/>
<mxGeometry x="1" y="0.25" width="10" height="10" relative="1" as="geometry">
<mxPoint x="-5" y="-5" as="offset"/>
</mxGeometry>
</mxCell>
<mxCell id="50" style="ZerplyOutputRight" parent="2" vertex="1">
<Object type="port" label="label 2" attribute1="value1" as="value"/>
<mxGeometry x="1" y="0.75" width="10" height="10" relative="1" as="geometry">
<mxPoint x="-5" y="-5" as="offset"/>
</mxGeometry>
</mxCell>
</root>
</mxGraphModel>
私はこれに間違って近づいていますか?..またはこれはバグのように見えますか?