2013-12-25 3 views
0

С Рождеством, все!изменение: исходное событие в 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), текст не изменяется на графике? Как обновить график, чтобы показать измененный элемент состояния?

Большое спасибо!

+0

OK, он кажется решен после того, как я поместил следующую строку joint.dia.LinkView.prototype.pointerup.apply (это, аргументы); чтобы быть первой строкой в ​​pointerup: function() {}. – user2960022

ответ

1

События change:source и change:target действительно инициируются также при изменении положения стрелок. В общем случае source и target ссылки могут быть либо точкой (объектом с объектами x и y), либо элементом (и в ближайшем будущем также ссылкой) - объектом с свойством id, указывающим на связанный элемент. Если вы заинтересованы только в source/target является элементом, вы можете просто проверить в обработчиках для change:source и change:target событий содержит ли source/target по ссылке на id недвижимость:

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

+0

Да, точно. Я опубликовал свое решение в группах google. Огромное спасибо! – user2960022

Смежные вопросы