我正在使用 jointjs,正如问题所述,我需要将每个输入的允许连接数限制为最多一个。如果一个输入已经被一个输出连接到,那么在现有连接被更改或删除之前,它不应该允许任何额外的连接尝试。
我想我需要修改 validateConnection 函数,所以我想知道是否有办法检查现有连接的 magnetT 变量?有点像
if(magnetT.connected) return false;
也许通过在链接时将自定义属性传递给端口。
on.link(){
target.connected = true;
}
或者类似的东西。显然上面是伪代码,所以如果有关于解决这个问题的不同方法的建议,我会洗耳恭听。在此先感谢您的帮助!
最佳答案
您说得对,当您绘制链接以确定是否可以与目标建立连接时,会调用 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;
}
关于javascript - 在 jointjs 中,如何将每个输入的连接数限制为一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30223776/