Всех с Рождеством!
Я хочу что-то сделать при изменении исходного или целевого элемента Joint.dia.Link. Сначала я попытался поместить код в функцию обратного вызова событий «change: source» и «change: target». Однако оказывается, что эти функции обратного вызова вызываются при изменении позиции ссылки, а не при изменении исходного или целевого элемента. Затем я попытался поместить код в функцию LinkView.pointup(), добавив тег, который установлен в функции обратного вызова событий «change: source» и «change: target», чтобы указать измененный элемент. Полученный код выглядит следующим образом:
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, когда я просто перетаскиваю один конец ссылки. Почему это происходит? Как я могу это исправить? Или любой новый подход, чтобы сделать какой-то ответ на изменение исходного или целевого элемента?
Кроме того, после того, как я сбросил события join.shapes.uml.State с помощью model.set('events', events), текст на графике не меняется? Как я могу обновить график, чтобы показать измененный элемент состояния?
Большое спасибо!