Events 更改:JointJS中的源事件

Events 更改:JointJS中的源事件,events,graph,hyperlink,diagramming,jointjs,Events,Graph,Hyperlink,Diagramming,Jointjs,大家圣诞快乐 我想在更改joint.dia.Link的源元素或目标元素时执行一些操作。首先,我尝试将代码放入“change:source”和“change:target”事件的回调函数中。然而,事实证明,这些回调函数是在链接的位置改变时调用的,而不是在源元素或目标元素改变时调用。然后,我尝试将代码放入LinkView.pointup()函数中,方法是添加一个标记,该标记在“change:source”和“change:target”事件的回调函数中设置,以指示已更改的元素。生成的代码如下所示:

大家圣诞快乐

我想在更改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的事件后,图形上的文本没有改变吗?如何刷新图形以显示已更改的状态元素


非常感谢

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


如果(this.get('source').id){/*…do something…*/}

确定,在我放置以下行joint.dia.LinkView.prototype.pointerup.apply(这是参数)之后,它似乎已经解决了;是pointerup:function(){}中的第一行。我已经将我的解决方案发布在google群组中。非常感谢!