【问题标题】:JointJS : How to restrict links per port to one?JointJS:如何将每个端口的链接限制为一个?
【发布时间】:2014-05-30 09:12:29
【问题描述】:

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

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

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

是否可以不更改库本身的代码?

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

PS:

  • 很遗憾,我目前不擅长 Backbone。
  • 我猜是把magnet="passive" 设置到有问题的端口上。只是不知道该怎么做。 (图表是动态的,不是元素之间的预定义链接)

【问题讨论】:

    标签: jointjs


    【解决方案1】:

    我整天都在为此苦苦挣扎。将磁铁设置为无源对我来说不是一个足够好的解决方案。在挖掘源代码后,我最终得到的是使用纸对象的 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';
    },
    

    【讨论】:

    • 嗨@DanielWood,这段代码很有帮助。我可以知道将入站也限制为一个。提前致谢!
    【解决方案2】:

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

    var source = graph.getCell(sourceId);
    source.attr('.outPorts circle/magnet', 'passive')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 2023-03-11
      • 2011-06-05
      • 2011-01-21
      • 2012-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多