2

これはこの質問に関連していますが、ノードにカスタム ノード タイプと属性を追加すること (これは成功しています) に関するものであり、接続自体にカスタム プロパティを追加しようとしています。

メソッドをオーバーライドしようgetPropertiesgetPropertyModelしまし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 に設定されていません)。

前もって感謝します。

4

1 に答える 1

4

申し訳ありませんが、これらのことは可能な限り簡単ではありません:S

あなたが探しているものの実用的なケースで古い例を更新しました。前と同じように、本番コードの資料ではなく、起動して実行するのに十分です ;)

ソース コードを見ると、ここでの問題の 1 つは、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]);

追加のオプションの 1 つは、CustomConnector拡張する独自のクラスを作成しY.Connector( Base.createDiagramBuilderを参照)、それを次のようなコネクタ クラスとして設定することです。

var builder = new Y.DiagramBuilder( {
    availableFields: availableFields,
    boundingBox: '#diagramContainer',
    connector: CustomConnector,
    srcNode: '#diagramBuilder'
});
于 2014-01-20T23:05:48.880 に答える