Событие, когда я назначаю ячейку как источник/цель по ссылке?

Я использую ссылки по умолчанию и хочу ограничить источник и цель из ссылок, потому что мне нужны только ссылки между rect(source) и circle(target).

Я пробовал это с link.on(change:source) и link.on(change:target), но эти события не запускаются, когда я хочу.

Кто-нибудь знает какое-то решение этой проблемы?

    var defaultLinks =  new joint.dia.Link({
            attrs: {
                '.marker-source': {transform: 'scale(0.001)' },
                '.marker-target': {fill:'black', d: 'M 10 0 L 0 5 L 10 10 z' },
                '.connection-wrap': {
                    stroke: 'black'
                }
            },
            smooth:true,
            path: []
    });
    defaultLinks.on('change:source',function(){
        alert("change source")
    });
    defaultLinks.on('change:target',function(){
        alert("change source")
    });

    this.paper = new joint.dia.Paper({
        el: this.paperScroller.el,
        width: 1200,
        height: 1000,
        gridSize: 10,
        perpendicularLinks: true,
        model: this.graph,
        defaultLink: defaultLinks
    });

person csadan    schedule 02.06.2014    source источник


Ответы (1)


Вы можете использовать функцию validateConnection(cellViewS, magnetS, cellViewT, magnetT, end, linkView) в параметрах Paper (http://jointjs.com/api#joint.dia.Paper). В этом руководстве показано использование: http://jointjs.com/tutorial/ports#restrict. В вашем случае вы должны использовать что-то вроде (не проверено):

var paper = new joint.dia.Paper({

    validateConnection: function(cellViewS, magnetS, cellViewT, magnetT, end, linkView) {
        // Only rectangle can be the source, if it is not, we do not allow such connection:
        if (cellViewS.model.get('type') !== 'basic.Rect') return false;
        // Only circle can be the target, if it is not, we do not allow such a connection:
        if (cellViewT.model.get('type') !== 'basic.Circle') return false;
        // Connection is allowed otherwise.
        return true;
    },
    ...
})
person dave    schedule 05.06.2014
comment
Еще раз спасибо, Дэйв, я использовал его. - person csadan; 09.06.2014