Javascript 如何在运行时更新cytoscape.js图形

Javascript 如何在运行时更新cytoscape.js图形,javascript,cytoscape.js,Javascript,Cytoscape.js,我正在使用cytoscape.js在HTML页面中呈现图形。该图表示一个RDF图,内容通过ajax请求REST服务获得。此服务允许添加/删除资源和语句,因此我希望在每次更改后更新图表 当我收到数据时,我正确地配置了cytoscape对象,但是当我对rdf图(添加/删除资源)进行一些更改时,我无法更新该图。目前,我尝试以下方法: 使用所有设置重新定义cytoscape对象,在这种情况下,如果删除一个元素,图形将更新,但如果添加新元素,图形将消失 使用以下函数更新cytoscape对象,在这种情况

我正在使用cytoscape.js在HTML页面中呈现图形。该图表示一个RDF图,内容通过ajax请求REST服务获得。此服务允许添加/删除资源和语句,因此我希望在每次更改后更新图表

当我收到数据时,我正确地配置了cytoscape对象,但是当我对rdf图(添加/删除资源)进行一些更改时,我无法更新该图。目前,我尝试以下方法:

  • 使用所有设置重新定义cytoscape对象,在这种情况下,如果删除一个元素,图形将更新,但如果添加新元素,图形将消失
  • 使用以下函数更新cytoscape对象,在这种情况下,如果我删除一个元素,图形将更新,但节点的位置将更改(所有节点重叠)。当我添加新元素时,图形消失了

    function updateGraph(graph){
      console.log("update graph");
      cy.$('node').remove();
      cy.$('edge').remove();
      cy.add(graph);
    }
    
  • 仅添加和删除感兴趣的元素,为此,我创建了一个函数来查找新旧图形之间的差异,然后调用以下函数。在这种情况下,
    cy.remove(elem[j])
    在cytoscope.js文件中生成一个错误,但是add方法起作用,图表显示了新元素,但我无法再选择或移动元素

    function addElements(elem){
      for (j in elem) {
      cy.add(elem[j]);
      }
    }
    
    function removeElements(elem){
      for (j in elem) {
       cy.remove(elem[j]);
      }
    }
    
  • 我也遵循这个答案,但没有成功

我的问题是如何在运行时更新图形元素而不更改样式、位置和其他设置?

使用
eles.data()
来(强制)修改开发人员定义的每个元素数据:


如果您想声明性地指定图形的突变,请使用
cy.json()

谢谢@maxkfranz正在寻找这个!