Javascript Cytoscape边缘句柄:多个cy实例与鬼边缘句柄混淆

Javascript Cytoscape边缘句柄:多个cy实例与鬼边缘句柄混淆,javascript,jquery,cytoscape.js,Javascript,Jquery,Cytoscape.js,我想在一个页面中按时间顺序显示几个cytoscape实例:首先一组节点显示在图形上,用户必须在它们之间创建边,然后移动到第二个图形,等等 我的重新初始化代码与cy.edgehandles之间似乎存在冲突。首先,一切正常。从第二个实例开始,拖动边时不显示“重影”边 我在控制台中收到以下错误消息: jquery.cytoscape.js edgehandles.js:333未捕获类型错误:无法 读取null jquery.cytoscape.js edgehandles.js的属性“id”:333

我想在一个页面中按时间顺序显示几个cytoscape实例:首先一组节点显示在图形上,用户必须在它们之间创建边,然后移动到第二个图形,等等

我的重新初始化代码与cy.edgehandles之间似乎存在冲突。首先,一切正常。从第二个实例开始,拖动边时不显示“重影”边

我在控制台中收到以下错误消息:

jquery.cytoscape.js edgehandles.js:333未捕获类型错误:无法 读取null jquery.cytoscape.js edgehandles.js的属性“id”:333 $.fn.cytoscapeEdgehandles.functions.init.drawLine jquery.cytoscape.js edgehandles.js:732 moveHandler jquery-2.0.3.min.js:5 x.event.dispatchjquery-2.0.3.min.js:5 x、 event.add.y.handle

显示为“null”的变量为:

333:源:sourceNode.id()

下面是我为重新初始化cy.instance而编写的代码:

$('#next').click(function(){
indexLevel++;// index to move from one instance to the next. 
cy.load(elesJson);// load nodes collection
cy.ready(); 
});
这是我的密码:

//元素

$(function(){
var elesJson = { 
nodes: [{ data: { id: 'S'} }...],
edges: [{ data: { id: 'loan', source: 'B', target: 'U' } },...]};
//实例索引

var indexLevel=0;
//cy初始化

$("#cy"+indexLevel).cytoscape({
style: cytoscape.stylesheet()...
elements: elesJson, 
ready: function(){window.cy = this;cy.zoomingEnabled( false );
    cy.panningEnabled( false );});

有什么解决办法吗?

我不知道问题到底是什么,但我认为原因可能在工作流程中。应该是:

(1)
destroy()

(2)
cy.destroy()
核心实例

(3) 创建一个新的核心实例,
cy

(4) 在
cy
上创建新的边缘手柄

交替流动:

(1) 永远不要破坏

(2) 不要销毁,而是清空图形并重新使用它们:
cy.elements().remove()

如果edgehandles中有bug,那么交替流可能更安全,而且肯定更高效(即更快)


如果这不能解决问题,那么也许你可以共享一些代码(如果代码敏感,或者私下发给我),我们可以在这里发布一般结果。

实际上我的初始化代码不是我提到的,而是:$(“#cy”).cytoscape({ready:function(){window.cy=this;cy.zoomingEnabled(false);cy.panningEnabled(false);});我只有一个cytoscape实例,它根据var indexLevel显示多个图形。但我需要重新初始化cy,以便它执行显示图形上节点的代码。此重新初始化似乎与“ghost edgehandler”冲突。