0

みなさんメリークリスマス!

Joint.dia.Link のソース要素またはターゲット要素が変更されたときに何とかしたいです。まず、「change:source」イベントと「change:target」イベントのコールバック関数にコードを入れてみました。ただし、これらのコールバック関数は、ソース要素またはターゲット要素が変更されたときに呼び出されるのではなく、リンクの位置が変更されるとすぐに呼び出されることがわかりました。次に、変更された要素を示すために、「change:source」および「change:target」イベントのコールバック関数に設定されているタグを追加して、コードを LinkView.pointup() 関数に入れようとしました。結果のコードは次のようになります。

link.on('change:source', function(){this.src_changed = true;});
link.on('change:target', function(){this.dest_changed = true;});

joint.shapes.custom.ModelLink = joint.dia.Link.extend({
     defaults: joint.util.deepSupplement({
        type: 'custom.ModelLink',
    }, joint.dia.Link.prototype.defaults)
});

joint.shapes.custom.ModelLinkView = joint.dia.LinkView.extend({
    pointerdown: function () {
        joint.dia.LinkView.prototype.pointerdown.apply(this, arguments);
    },
    pointermove: function () {
        joint.dia.LinkView.prototype.pointermove.apply(this, arguments);
    },
    pointerup: function (evt, x, y) {
        var link = this.model;
        if(link.src_changed) { // do something}
        if(link.dest_changed) {// do something}
        joint.dia.LinkView.prototype.pointerup.apply(this, arguments);
    }
});

ただし、リンクの一方の端をドラッグしているだけで、src_changed と dest_changed が両方とも true に設定されることがあります。なぜこれが起こるのですか?どうすればこれを修正できますか? または、ソース要素またはターゲット要素の変更に対応するための新しいアプローチはありますか?

その上、model.set('events', events) を使用して joint.shapes.uml.State のイベントをリセットした後、テキストはグラフ上で変化しませんか? グラフを更新して、変更された状態要素を表示するにはどうすればよいですか?

どうもありがとう!

4

1 に答える 1

2

およびイベントは、矢印の位置が変化したときにも実際にトリガーされますchange:sourcechange:target一般に、リンクのsourceandtargetは、ポイント (プロパティxyプロパティを持つオブジェクト) または要素 (近い将来にはリンクも) のいずれかになります (リンクidされた要素を指すプロパティを持つオブジェクト)。source/が要素であることのみに関心がある場合は、リンクの/にプロパティが含まれているかどうかを およびイベントtargetのハンドラーで確認できます。change:sourcechange:targetsourcetargetid

if (this.get('source').id) { /*... do something ...*/ }

于 2013-12-26T17:52:42.830 に答える