当前位置: 首页 > 知识库问答 >
问题:

jsPlumb:拖动新连接应删除现有连接

澹台鸿熙
2023-03-14

使用jsPlumb,我成功地进行了以下设置:

  • 有多个节点与特殊类型流程图中的节点类似。

先举个小例子:http://fiddle.darkspot.ch/ivr/flowchart/ivrplumb.html (经过一个小时的尝试,不幸的是我没有让它在JSFIDLE上运行——所以我自己主持了它)

我想要实现的是:如果用户将新连接从一个出口拖到另一个节点,那么应该按照预期建立连接。但是应该删除此出口上的所有其他连接。

我尝试了不同的方法:

  • 在每个出口气泡上都有一个点击监听器(指向jsPlumb文档的链接)。不起作用-

繁殖步骤:

  1. 将鼠标移动到其中一个橙色正方形上,单击并拖动连接到另一个节点。(应建立连接)

我做错了什么?


共有3个答案

诸葛煜
2023-03-14

我在角项目上使用JSPLUMB,我做了这个解决方案:

删除连接(如果存在),然后删除新连接:

    this.jsPlumbInstance.bind('beforeDrop', params => {
  // DELETA CONEXAO CASO JA EXISTE PARA CRIAR OUTRA
  // REMOVE CURRENT CONNECTION IF EXIST TO CREATE NEW
  this.jsPlumbInstance.getConnections().map(connection => {
    if (connection.targetId === params.targetId && connection.sourceId === params.sourceId) {
      this.jsPlumbInstance.deleteConnection(connection);
    }
  });
});

JSPLUMB没有“afterDrop”绑定,所以保留此解决方案。

潘向明
2023-03-14

创建一个全局数组变量,并将每个新连接推送到该数组

    var cons = [];
    instance.bind("connection", function (info) {
        var src = info.sourceId;
        var trgt = info.targetId;
        if (!cons.includes(src+trgt)) {//if not exists
           cons.push(src+trgt);
           cons.push(trgt+src);//(optional) use to prevent adding connection from target to source 
        }
    });

然后在beforeDrop中,检查要创建的新连接是否已存在于阵列中。

    instance.bind('beforeDrop', function(info){
        var createCon = true;
        var src = info.sourceId;
        var trgt = info.targetId;
        var newCon = src + trgt;
        if(cons.includes(newCon)){//if new connection exists do not allow to create new connection
            createCon = false;
        }
        return createCon;
    });

并在移除连接时移除数组中的元素。

    instance.bind("click", function (info) {
        var el = cons.indexOf(info.sourceId + info.targetId);
        var el2 = cons.indexOf(info.targetId + info.sourceId);
        cons.splice(el, 1);
        cons.splice(el2, 1);
        instance.deleteConnection(info);
    });
王宜
2023-03-14

在建立新连接之前,请检查源是否已经有传出连接,如果有,请将其删除。假设退出元素具有exit类:

jsPlumb.bind('beforeDrop', function(ci){ // Before new connection is created
    var src=ci.sourceId;
    var con=jsPlumb.getConnections({source:src}); // Get all source el. connection(s) except the new connection which is being established 
    if(con.length!=0 && $('#'+src).hasClass('exit')){
        for(var i=0;i<con.length;i++){
            jsPlumb.detach(con[i]);
        }
    }
    return true; // true for establishing new connection
});
 类似资料:
  • 我正在使用jsplumb,但是我无法删除两个只有一个div的id的div之间的连接。

  • 我正在使用jsPlumb创建一个包含两列的匹配小部件。 jsPlumb实例创建为: 我创建了源和目标,如下所示: 连接过程正常工作。但是在建立一个连接后的问题如果我删除连接,连接endpoint仍然可见。 我尝试添加配置“\u deleteondetch”,还尝试删除connectiondeach上的endpoint。在这两种情况下,endpoint都被删除,但在我尝试连接相同的元素时,它会出错。

  • 我正在处理一个管道问题。当我试图以编程方式删除所有元素连接时,我得到了未捕获的TypeError:无法读取未定义的属性“left” 我有几个节点(html元素),每个都有1个输入endpoint(接受的终端)和n个输出endpoint。每个节点后面还有一个javascript对象。我的软件中有一个“选定”状态。用户可以选择多个节点,并将对象推送到一个称为选择的数组。我有一个删除键的键侦听器。当按下

  • 我想画一个流程图。我动态创建div,并为每个div设置了唯一的“id”属性,并使用Jsplumb连接器连接它们。 我从数据库中获取源和目标id(请注意,动态创建的div的“id”属性是其从数据库中的id),并存储在“connectors”json中。其格式如下: {[from:A,to:B],[from:A,to:C],[from:B,to:C]} jsplumb代码如下 问题: 我现在拥有的是

  • 我有div,可以拖放到绘图区域。可以使用鼠标从源endpoint拖放到目标endpoint手动连接这些div。在这样创建的连接上,连接被分离,但endpoint保留,删除的连接可以通过上述相同的手动过程重新创建。现在,我还将以json格式的连接节点流程图形式的绘图保存到磁盘文件中。在加载文件时,流程图会完美地显示所有连接和节点。现在我在点击一个节点时删除一个连接,它就可以工作了。但是现在我不能再次

  • 我试图以编程方式建立一些连接。问题是,当绘制连接时,会创建新的endpoint,而现有endpoint不再可单击。我确实有拖动行为的endpoint。我无法让endpoint(由连接创建)具有与原始endpoint相同的属性。 我做了一个工作jsFiddle:http://jsfiddle.net/SCSaf/4/ 在下面的代码中,初始化容器并绘制连接 在公共变量中,我尝试将源endpoint(e