0

大家圣诞快乐!

当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。为什么会这样?我怎样才能解决这个问题?或者有什么新方法可以对源元素或目标元素的变化做出一些反应?

此外,在我使用model.set('events',events)重置joint.shapes.uml.State的事件后,图表上的文本没有改变?如何刷新图表以显示更改的状态元素?

非常感谢!

4

1 回答 1

2

当箭头的位置发生变化时,确实也会触发change:sourceand事件。change:target通常,链接的sourceandtarget可以是点(具有xy属性的对象)或元素(在不久的将来也可以是链接) - 具有id指向链接元素的属性的对象。如果你只对source/target作为一个元素感兴趣,你可以在你的处理程序中检查change:source链接的/change:target是否包含属性:sourcetargetid

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

于 2013-12-26T17:52:42.830 回答