Ошибка TypeError происходит только при отладке

При отладке не связанной с этим проблемы мой код зависал так, как не было до открытия отладчика браузера.

TypeError: Cannot convert undefined or null to object

Ошибка происходит в обработчике событий для перемещения mxCell,

adjustPortPosition(sender, event)
{
  ...
  for(var i = 0; i < event.properties.cells.length; i++)
  {
    var node = event.properties.cells[i];
    var edges = this.graph.getEdges(node); // crashes here!
    ...
  }
}

Сбой происходит после звонка mxGraph.getEdges, Когда я вошел в этот вызов, все в этом методе выполнялось без проблем, а возвращаемое значение представляло собой массив из 3 mxCell объекты, а не undefined или же null, getEdges не появляется в трассировке стека, но строка, на которой он вызывается, появляется. Все, что я делаю, это присваиваю возвращаемое значение переменной, так что даже если это было undefined или же null это не должно делать какого-либо преобразования.

Это происходит только при перемещении вершины, имеющей дочерние вершины. Любые вершины в моем графе без детей не приводят к ошибке.

Чтобы сделать ситуацию еще менее понятной, ошибка не возникает последовательно. Не изменяя код, он несколько раз переключался между сбоями каждый раз, когда я перемещал вершину во время отладки и не мог воспроизвести сбой вообще.

Вот mxgraph.getEdges:

mxGraph.prototype.getEdges = function(cell, parent, incoming, outgoing, includeLoops, recurse)
{
    incoming = (incoming != null) ? incoming : true;
    outgoing = (outgoing != null) ? outgoing : true;
    includeLoops = (includeLoops != null) ? includeLoops : true;
    recurse = (recurse != null) ? recurse : false;

    var edges = [];
    var isCollapsed = this.isCellCollapsed(cell);
    var childCount = this.model.getChildCount(cell);

    for (var i = 0; i < childCount; i++)
    {
        var child = this.model.getChildAt(cell, i);

        if (isCollapsed || !this.isCellVisible(child))
        {
            edges = edges.concat(this.model.getEdges(child, incoming, outgoing));
        }
    }

    edges = edges.concat(this.model.getEdges(cell, incoming, outgoing));
    var result = [];

    for (var i = 0; i < edges.length; i++)
    {
        var state = this.view.getState(edges[i]);

        var source = (state != null) ? state.getVisibleTerminal(true) : this.view.getVisibleTerminal(edges[i], true);
        var target = (state != null) ? state.getVisibleTerminal(false) : this.view.getVisibleTerminal(edges[i], false);

        if ((includeLoops && source == target) || ((source != target) && ((incoming &&
            target == cell && (parent == null || this.isValidAncestor(source, parent, recurse))) ||
            (outgoing && source == cell && (parent == null ||
                    this.isValidAncestor(target, parent, recurse))))))
        {
            result.push(edges[i]);
        }
    }

    return result;
};

Вот трассировка стека:

`Uncaught TypeError: Cannot convert undefined or null to object
at NetView.adjustPortPosition (net-view.js:1805)
at mxGraph.mxEventSource.fireEvent (mxEventSource.js:185)
at mxGraph.moveCells (mxGraph.js:6009)
at mxGraphHandler.moveCells (mxGraphHandler.js:1016)
at mxGraphHandler.mouseUp (mxGraphHandler.js:907)
at mxGraph.fireMouseEvent (mxGraph.js:12612)
at mxCellRenderer.<anonymous> (mxCellRenderer.js:851)
at SVGGElement.<anonymous> (mxUtils.js:208)`

0 ответов

Другие вопросы по тегам