2

这与这个问题有关,但它是关于向节点添加自定义节点类型和属性(我已经成功地做到了),我希望在连接本身上添加自定义属性。

我尝试过覆盖这些方法,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 上设置)

提前致谢。

4

1 回答 1

4

抱歉,这些事情并不像他们想象的那么简单:S

我已经用您正在寻找的工作案例更新了旧示例。和以前一样,不是生产代码材料,足以让您启动并运行;)

如果您查看源代码,这里的一个问题是它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'
});
于 2014-01-20T23:05:48.880 回答