みなさんメリークリスマス!
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 のイベントをリセットした後、テキストはグラフ上で変化しませんか? グラフを更新して、変更された状態要素を表示するにはどうすればよいですか?
どうもありがとう!