在jointjs中,如何将每个输入的连接数限制为一个?

dal*_*der 3 javascript jointjs

我正在使用jointjs,正如问题所述,我需要将每个输入的允许连接数限制为最多一个。如果输入已被输出连接到,则在现有连接被更改或删除之前,不应允许任何额外的连接尝试。

我想我需要修改 validateConnection 函数,所以我想知道是否有办法检查现有连接的 MagnetT 变量?就像是

if(magnetT.connected) return false;
Run Code Online (Sandbox Code Playgroud)

也许通过在链接时将自定义属性传递给端口。

on.link(){
target.connected = true;
}
Run Code Online (Sandbox Code Playgroud)

或那种性质的东西。显然,上面是伪代码,所以如果有关于解决这个问题的不同方法的建议,我全神贯注。在此先感谢您的帮助!

Isl*_*lla 5

当您绘制链接以确定是否可以与目标建立连接时,调用 validateConnection 函数是正确的。在此功能中,您可以为所欲为。另一个有用的函数是 validateMagnet ,它确定当用户单击磁铁时是否可以绘制导线。

我不认为jointJS 有一个API 来获取连接到元素或端口的链接。你可以做的是把所有的链接都写成纸,检查任何链接的源或目标是否连接到了magnetT。如果已连接,则返回 false。

这是代码:

validateMagnet: function(cellView, magnet){
    var links = graph.getLinks();
    for (var i = 0; i < links.length; i++){
        if( (( cellView.model.id  == links[i].get('source').id ) && ( magnet.getAttribute('port') == links[i].get('source').port) )||
        (( cellView.model.id  == links[i].get('target').id ) && ( magnet.getAttribute('port') == links[i].get('target').port) ))
        return false;
    }
    return true;
},
validateConnection: function(cellViewS, magnetS, cellViewT, magnetT, end, linkView){
    var links = graph.getLinks();
    for (var i = 0; i < links.length; i++)
    {  
        if(linkView == links[i].findView(paper)) //Skip the wire the user is drawing
        continue;

        if ( (( cellViewT.model.id  == links[i].get('source').id ) && ( magnetT.getAttribute('port') == links[i].get('source').port)) ||
        (( cellViewT.model.id  == links[i].get('target').id ) && ( magnetT.getAttribute('port') == links[i].get('target').port)) ){
            return false;
        }
    } 
    return true;
}
Run Code Online (Sandbox Code Playgroud)