Cytoscape.js: «Uncaught Error: элемент должен иметь ссылку на ядро ​​и заданные параметры» при попытке добавить узел в граф - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь написать скрипт для использования AJAX для отправки данных из моего приложения Python / Flask в Cytoscape.js (оба работают на одном хосте).Я хочу, чтобы у меня был опрос опроса cytoscape для обновлений от /update_graph, который является конечной точкой колбы, которая возвращает данные JSON, описывающие узлы / ребра для добавления в граф.Я могу создать отдельные узлы и добавить их в график, но когда я пытаюсь сделать это из функции, происходит сбой с ошибкой "Uncaught Error: An element must have a core reference and parameters set".

Я инициализировал cytoscape следующим образом:

var cy = cytoscape({
    container: $('#cytoscape_panel'), // container to render in

    elements: $.getJSON('/update_graph'),

    style: [
        { selector: 'node', 
          style: { 'background-color': '#666', 
                   'label': 'data(id)'}},
        { selector: 'edge', 
          style: { 'width': 3,
                   'line-color': '#ccc', 
                   'target-arrow-color': '#ccc', 
                   'target-arrow-shape': 'triangle'}}],

    layout: { name: 'grid', rows: 1 }});

И затем я включаю его в свой HTML-код следующим образом:

<div class="grid-container">
  <div id="cytoscape_panel" class="grid-item"></div>
  <div id="info_panel" class="grid-item"></div>
</div>

<script src="js/cytoscape.umd.js"></script>
<script src="js/cytoscape_panel.js"></script>

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

d = $.getJSON('/update_graph');
cy.add(d['responseJSON'])
cy.fit()

... и снова новый узел отобразится правильно.Однако, когда я беру этот точно такой же код и пытаюсь поместить его в функцию, он не работает:

function foo (){
    d = $.getJSON('/update_graph');
    cy.add(d['responseJSON']);
    cy.fit();
}

Новый узел не создается, и я получаю следующую ошибку:

"cytoscape.umd.js:1192 Uncaught Error: An element must have a core reference and parameters set
    at error (cytoscape.umd.js:1192)
    at new Element (cytoscape.umd.js:1430)
    at Core.add (cytoscape.umd.js:13340)
    at foo (<anonymous>:3:8)
    at <anonymous>:1:1

Что означает эта ошибка?Есть ли что-то, чего я не понимаю в правилах области видимости переменных Javascript, из-за которых я не могу получить доступ к объекту cy внутри функции, как это?

...