繁体   English   中英

连接上的关系图生成器自定义属性

[英]Diagram Builder Custom Attributes on Connections

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

我尝试覆盖builder.connector上的方法getPropertiesgetPropertyModel无效。 以下是我目前(以及我认为最接近)的尝试:

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

提前致谢。

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

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

如果查看源代码,这里的一个问题是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]);

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM