невозможно создать ребро в Mxgraph во время загрузки графика через xml - PullRequest
0 голосов
/ 26 февраля 2020

Невозможно создать ребро между двумя вершинами при загрузке графа через XML. Хотя он отлично работает при создании его с начала. Я хочу создать ребро между двумя вершинами при удалении узла. Тот же код работает нормально, если я создал график с нуля. Мой код ниже.

var graph;var parent;

    function main(container) {
        // Checks if the browser is supported
        if (!mxClient.isBrowserSupported()) {
            // Displays an error message if the browser is not supported.
            mxUtils.error('Browser is not supported!', 200, false);
        } else {
            // Creates the graph inside the given container
            graph = new mxGraph(container);


            // Enables rubberband selection
            new mxRubberband(graph);

            parent = graph.getDefaultParent();

            var keyHandler = new mxKeyHandler(graph);
            keyHandler.bindKey(46, function (evt) {
                console.log('key')
                if (graph.isEnabled()) {
                    const selectedCell = graph.getSelectionCell();
                    let source = graph.getIncomingEdges(selectedCell)[0].source;
                    if (graph.getOutgoingEdges(selectedCell)[0]) {
                        let target = graph.getOutgoingEdges(selectedCell)[0].target;
                        graph.removeCells();
                        graph.insertEdge(parent, null, '', source, target); // this line is not executing.
                    } else {
                        graph.removeCells();
                    }

                }
            });
            graph.addListener(mxEvent.DOUBLE_CLICK, function (sender, evt) {

                evt.consume();
            });
            graph.addListener(mxEvent.CELL_CONNECTED, function(sender, evt)
            {
                console.log('cell connected------------------------')
            });
            addXml();
        }
    };

    function addXml() {
        parent = graph.getDefaultParent();
        let xml = "<mxGraphModel><root><mxCell id=\"0\"/><mxCell id=\"1\" parent=\"0\"/><mxCell id=\"2\" value=\"Hello,\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"20\" y=\"20\" width=\"80\" height=\"30\" as=\"geometry\"/></mxCell><mxCell id=\"3\" value=\"World!\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"160\" y=\"20\" width=\"80\" height=\"30\" as=\"geometry\"/></mxCell><mxCell id=\"4\" value=\"World!\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"320\" y=\"20\" width=\"80\" height=\"30\" as=\"geometry\"/></mxCell><mxCell id=\"5\" value=\"World!\" vertex=\"1\" parent=\"1\"><mxGeometry x=\"480\" y=\"20\" width=\"80\" height=\"30\" as=\"geometry\"/></mxCell><mxCell id=\"6\" value=\"\" edge=\"1\" parent=\"1\" source=\"2\" target=\"3\"><mxGeometry relative=\"1\" as=\"geometry\"/></mxCell><mxCell id=\"7\" value=\"\" edge=\"1\" parent=\"1\" source=\"3\" target=\"4\"><mxGeometry relative=\"1\" as=\"geometry\"/></mxCell><mxCell id=\"8\" value=\"\" edge=\"1\" parent=\"1\" source=\"4\" target=\"5\"><mxGeometry relative=\"1\" as=\"geometry\"/></mxCell></root></mxGraphModel>"
        var xmlDocument = mxUtils.parseXml(xml);
        // console.log(xmlDocument);
        if (xmlDocument.documentElement != null && xmlDocument.documentElement.nodeName == 'mxGraphModel') {
            var decoder = new mxCodec(xmlDocument);
            var node = xmlDocument.documentElement;
            decoder.decode(node, graph.getModel());
        }

    }
...