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

防止两个连接共享同一个锚

邬宜然
2023-03-14

我使用jsPlumb允许用户构建图形。我允许用户拖动这些元素,所以我为每个endpoint使用锚集合,让jsPlumb在建立连接时从该集合中为我选择“最佳”锚。我遇到的问题是,我可能有多达十几个连接来自任何给定的endpoint,所以当许多人最终选择相同的“最佳”锚点时,这些连接将在视觉上分散注意力——在图中造成拥塞的外观。为了解决这个问题,我想告诉jsPlumb限制任何两个连接在endpoint上共享同一个锚。

我希望实现的最简单的可视化方法是在本演示中:https://jsplumbtoolkit.com/community/demo/dynamicAnchors/index.html

开箱即用,本演示中的所有连接都不会重叠。

如果您阅读源代码,您可以看到这是通过拥有一组“源”锚和一组“目标”锚来完成的,并且从第一组锚到第二组锚的连接是专门建立的。但是,正如我上面所说的,我可以有多达十几种类型的连接,可以从我的endpoint连接或连接到我的endpoint,所以我不想为每个endpoint指定一组唯一的锚。这将限制沿着endpoint边缘的每个潜在锚点之间的行间距,因为每个锚点集不能与任何其他锚点集相交。

有没有办法告诉jsPlumb我不希望连接共享相同的锚?

共有2个答案

索锐藻
2023-03-14

有没有办法告诉jsPlumb我不希望连接共享相同的锚?

JS小提琴演示

JQuery

jsPlumb.bind("jsPlumbConnection", function (CurrentConnection) {
    var DuplicateCount = 0;
    var allConn = jsPlumb.getAllConnections();
    var length = allConn["green dot"].length;
    for (var i = 0; i < length; i++) {
        if (allConn["green dot"][i].targetId ==               
                                         CurrentConnection.connection.targetId) {
            DuplicateCount = DuplicateCount + 1;
        }
    }
    if (DuplicateCount > 1) {
        jsPlumb.detach(CurrentConnection.connection);
        return;
    } 
});

你可以把粉红色和绿色连接起来。粉色与粉色、绿色与粉色、绿色与绿色不允许。

孟英锐
2023-03-14
jsPlumb.bind('connection',function(info){
 var con=info.connection;
 var arr=jsPlumb.select({source:con.sourceId,target:con.targetId});
 if(arr.length>1){
    jsPlumb.detach(con);
 }
});

一个简洁的,更新了jsPlumb的API。

查看是否存在具有相同源的另一个连接

更新:

在2.4之后的版本中使用jsPlumb.delete连接而不是jsPlumb.detach

 类似资料:
  • 我有大约60个套接字和20个线程,我想确保每个线程每次都在不同的套接字上工作,所以我根本不想在两个线程之间共享同一个套接字。 在我的类中,我有一个后台线程,它每60秒运行一次并调用方法。在方法中,我迭代我拥有的所有套接字,然后通过调用类的方法开始逐个ping它们,并根据响应将它们标记为活的或死的。在方法中,我总是需要迭代所有套接字并ping它们以检查它们是活的还是死的。 现在,所有读取器线程将并发

  • 这可能是一个很基本的问题,但它使我感到困惑。 两个不同连接的套接字可以共享一个端口吗?我正在编写一个应用服务器,它应该能够处理100K以上的并发连接,我们知道一个系统上可用的端口数量大约是60K(16bit)。一个连接的套接字被分配给一个新的(专用的)端口,因此这意味着并发连接的数量受到端口数量的限制,除非多个套接字可以共享同一个端口。所以问题是。

  • 我有一个运行在400个TaskManager上的flink应用程序。在1小时的窗口时间内,我会更频繁地获得相同的密钥,比如说,在1500个唯一密钥中,有50个密钥会更频繁地出现。这使得很少有任务管理者单独处理的数量比其他人多。如果390个TaskManager每分钟处理50MB,那么其他10个TaskManager每分钟处理10GB。这使得系统速度非常慢。如果负载很高,我们可以与多个TaskMan

  • 例如,以下结果结构将是理想的: -只读接口 -可变实现 或者更好的是,有没有一种不同的方式来实现这一点?

  • null 我所尝试的:(我想是愚蠢的) 我有一个类,该对象应该作为共享,这样我就可以将其作为全局使用,而无需实例化它,例如. 这不起作用,我无法将在一个线程中接收到的数据发送到另一个线程。 我知道有一个明显的锁定问题,因为如果一个线程正在写一个对象,其他线程不能访问它,直到第一个线程完成了写。 和类。 我认为,我创建动态线程来为每个连接的客户机服务的方式(共享相同的数据源)不可能使用Global