6

JointJS 库的 API 文档在这里:http ://www.jointjs.com/api 我正在使用带有端口的元素的 DEVS 插件。

我需要将一个端口的连接数限制为一个。

从端口建立链接后,除非删除现有连接,否则用户将无法从同一端口启动连接。

库本身没有代码更改是否可能?

即使在查看 API 文档和代码本身之后,我也无法获得实现此要求的钩子/入口点。任何帮助或指针表示赞赏。

PS:

  • 不幸的是,我目前不擅长 Backbone。
  • 我猜这是将magnet =“passive”设置为相关端口的问题。只是不知道该怎么做。(图是动态的,不是元素之间的预定义链接)
4

2 回答 2

12

我整天都在为此苦苦挣扎。将磁铁设置为无源对我来说不是一个足够好的解决方案。在挖掘源代码后,我最终得到的是使用纸对象的 validateMagnet 函数。我从磁铁获取端口,然后从源模型获取所有出站链接。如果任何链接使用相同的点,我会拒绝验证。这是代码:

validateMagnet: function(cellView, magnet) {
    // Prevent links from ports that already have a link
    var port = magnet.getAttribute('port');
    var links = graph.getConnectedLinks(cellView.model, { outbound: true });
    var portLinks = _.filter(links, function(o) {
        return o.get('source').port == port;
    });
    if(portLinks.length > 0) return false;
    // Note that this is the default behaviour. Just showing it here for reference.
    // Disable linking interaction for magnets marked as passive (see below `.inPorts circle`).
    return magnet.getAttribute('magnet') !== 'passive';
},
于 2016-01-13T22:22:11.980 回答
2

它就像从图形中获取元素并在其上设置某些属性一样简单。

var source = graph.getCell(sourceId);
source.attr('.outPorts circle/magnet', 'passive')
于 2014-05-30T10:02:47.607 回答