С Рождеством, все!изменение: исходное событие в JointJS
Я хочу что-то сделать, когда исходный элемент или целевой элемент 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 оба устанавливаются истина иногда, когда я просто перетаскивая один конец ссылки. Почему это происходит? Как я могу это исправить? Или какой-либо новый подход для выполнения какого-либо ответа на изменение элемента-источника или целевого элемента?
Кроме того, после того, как я перезапустил события joint.shapes.uml.State, используя model.set ('events', events), текст не изменяется на графике? Как обновить график, чтобы показать измененный элемент состояния?
Большое спасибо!
OK, он кажется решен после того, как я поместил следующую строку joint.dia.LinkView.prototype.pointerup.apply (это, аргументы); чтобы быть первой строкой в pointerup: function() {}. – user2960022