簡體   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