Я пытаюсь написать скрипт для использования 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 внутри функции, как это?