这与this question有关,但它涉及向节点添加自定义节点类型和属性(我已经成功完成了此操作),并且我希望在连接本身上添加自定义属性。
我尝试覆盖getProperties
上的方法getPropertyModel
和builder.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/