这与this question有关,但它涉及向节点添加自定义节点类型和属性(我已经成功完成了此操作),并且我希望在连接本身上添加自定义属性。

我尝试覆盖getProperties上的方法getPropertyModelbuilder.connector无济于事。以下是我目前(以及我认为最接近)的尝试:

// .. adding different node types and their attributes

var builder = new Y.DiagramBuilder( {
    availableFields: availableFields,
    boundingBox: '#diagramContainer',
    srcNode: '#diagramBuilder'
} );

builder.render();

var test = builder.connector.addAttr(
    'testAttr',
    {
        value:'test',
        validator: Y.Lang.isString,
        readOnly: false,
        lazyAdd: false
    },
    false
);
builder.connector.SERIALIZABLE_ATTRS.push('testAttr');

// just calling addAttr doesn't seem to work, so I also tried this..
test.getProperties = function() {

    return [
        {
            attributeName: 'testAttr',
            editor: new Y.TextCellEditor(),
            name: 'Test Attr',
            value: 'default value??'
        }
    ]
};


从源头看,似乎还有一个STRINGS属性可能也需要修改,但是我只能找到一种获取字符串(getStrings)的方法,而没有修改它们的方法。我可以尝试直接对其进行修改,但是我不能100%地确定它存在于哪个对象上(上面没有在builder.connector上设置)

提前致谢。

最佳答案

抱歉,这些事情并没有像可能的那么简单:

我用您要查找的working case更新了旧示例。和以前一样,不是生产代码材料,仅足以使您开始工作;)

如果查看源代码,这里的一个问题是Y.DiagramBuilderImpl创建自己的Y.Connector实例,因此,方法是对mix进行一些扩展以修改其行为。

如您在示例中所见,我们使用

var CustomConnector = function() {
};

CustomConnector.ATTRS = {
    testAttr: {
        valueFn: function() {
            return 'test attr instance value';
        }
    }
};

CustomConnector.prototype.initializer = function() {
    var instance = this;

    instance.SERIALIZABLE_ATTRS.push('testAttr');
};

CustomConnector.prototype.getPropertyModel = function() {
    var instance = this;

    return [
        {
            attributeName: 'testAttr',
            editor: new Y.TextCellEditor(),
            name: 'Test Attr'
        }
    ];
};


然后,将扩展名mix扩展到现有的Y.Connector添加和覆盖功能中,方法是:

Y.Base.mix(Y.Connector, [CustomConnector]);


另一个选择是让您创建扩展CustomConnector的自己的Y.Connector类(请参见Base.create),然后将其设置为DiagramBuilder的连接器类,例如:

var builder = new Y.DiagramBuilder( {
    availableFields: availableFields,
    boundingBox: '#diagramContainer',
    connector: CustomConnector,
    srcNode: '#diagramBuilder'
});

关于javascript - 连接上的关系图生成器自定义属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21236858/

10-12 02:12