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

标签 javascript jointjs

我正在使用 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/

相关文章:

javascript - 使用 jQuery 用元素包裹元素内容的子字符串

javascript - 我应该返回 deferred.resolve/reject 的结果吗?

javascript - 通过单击并输入新标签来更改 JointJS 单元格的标签

javascript - 当我在链接上分配像源/目标这样的单元格时发生事件?

css - 防止在 Joint JS 中拖拽

javascript - 我如何在 jQuery 中编写这个 JavaScript 迭代函数?

javascript - 如何为平面配置 Openlayers 1 :1 pixel coordinate system?

javascript - 根据选择框选择定义隐藏字段值

javascript - JointJS 模型 - 未分配文本属性

jointjs - 不触发单元格事件