具有相同名称端口名称的 JointJS 不起作用

JointJS with same name port name doesn't work

如果输入端口和输出端口分配了相同的名称,它将不起作用! IE。 这行不通:

inPorts: ['aaa', 'bbb'],
outPorts: ['aaa', 'bbb']

这是我的代码:

http://jsfiddle.net/tianxu0836/L2f73cbf/50/

jsfiddle 中的代码是工作版本,因为输入端口和输出端口的名称不同。 如果您将名称设置为相同的名称,它将不再起作用。

有什么解决办法吗?这不应该发生。

尝试按如下方式更新 devs.Model 的实现

joint.shapes.devs.Model = joint.shapes.basic.Generic.extend(_.extend({}, joint.shapes.basic.PortsModelInterface, {

    markup: '<g class="rotatable"><g class="scalable"><rect class="body"/></g><text class="label"/><g class="inPorts"/><g class="outPorts"/></g>',
    portMarkup: '<g class="port port<%= id %>"><circle class="port-body"/><text class="port-label"/></g>',

    defaults: joint.util.deepSupplement({

        type: 'devs.Model',
        size: { width: 1, height: 1 },
        inPorts: [],
        outPorts: [],
        attrs: {
            '.': { magnet: false },
            text: {
                'pointer-events': 'none'
            },
            '.body': {
                width: 150,
                height: 250,
                stroke: '#000'
            },
            '.port-body': {
                r: 10,
                magnet: true,
                stroke: '#000'
            },
            '.label': {
                text: 'Model',
                'ref-x': .5,
                'ref-y': 10,
                ref: '.body',
                'text-anchor': 'middle',
                fill: '#000'
            },
            '.inPorts .port-label': {
                x: -15,
                dy: 4,
                'text-anchor': 'end',
                fill: '#000'
            },
            '.outPorts .port-label': {
                x: 15,
                dy: 4,
                fill: '#000'
            }
        }
    }, joint.shapes.basic.Generic.prototype.defaults),

    getPortAttrs: function(portName, index, total, selector, type) {

        var attrs = {};

        var portClass = 'port' + index;
        var portSelector = selector + '>.' + portClass;
        var portLabelSelector = portSelector + '>.port-label';
        var portBodySelector = portSelector + '>.port-body';

        attrs[portLabelSelector] = {
            text: portName
        };

        attrs[portBodySelector] = {
            port: {
                // id: portName || _.uniqueId(type),
                id: _.uniqueId(type),
                type: type
            }
        };

        attrs[portSelector] = {
            ref: '.body',
            'ref-y': (index + 0.5) * (1 / total)
        };

        if (selector === '.outPorts') {
            attrs[portSelector]['ref-dx'] = 0;
        }

        return attrs;
    }
}));

唯一的变化是 ID 的生成方式,在 getPortAttrs 中 - 名称不用作 ID。