6

JointJS ライブラリの API ドキュメントはこちら: http://www.jointjs.com/api ポート付きの要素に DEVS プラグインを使用しています。

ポートからの接続数を 1 つに制限する必要があります。

ポートからリンクが作成されると、既存の接続が削除されない限り、ユーザーは同じポートから接続を開始できません。

ライブラリ自体のコードを変更しなくても可能ですか?

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 に答える