0

私はこのように My dojo Widgets の ctor を書きます。

    constructor: function(params){
        var r = this.inherited(arguments);
        this.params = params;
        //other ctor works
        return r;
    }

ctor 引数として JSON 応答を使用してウィジェットをインスタンス化します。が好きnew MyWidget(res)
で、JSON 応答には次のidような属性が含まれています{id: 5, text: 'Hallo'}

_WidgetBaseコンストラクターは、この ID を Widget Id として扱い、 をスローしますTried to register widget with id==6 but that id is already registered別のサブジェクトにも取得id: 6している他のウィジェットがある可能性があります。

subject_id多くのことを変更する必要があるため、JSON応答を出力に変更することはできません。

ウィジェットのインスタンス化後にそのIDを取得する必要があります。

では、この問題を処理するための良い設計は何でしょうか?

4

2 に答える 2

1

興味深い質問です。これが私の解決策です: http://jsfiddle.net/phusick/z9u8a/

var Widget = declare(_WidgetBase, {

    postscript: function() {
        var id = arguments[0]["id"];
        delete arguments[0]["id"];
        this.inherited(arguments);
        this.params.id = id;
    },

    constructor: function(params) {                      
        // your constructor here
    }            

});

var widget1 = new Widget({ id: 1, text: 'Hallo 1'});
var widget2 = new Widget({ id: 1, text: 'Hallo 2'});

編集:私はいくつかのクリーンアップを行ったので、必要なのはpostscriptメソッドを追加することだけです.

于 2012-06-08T16:55:01.123 に答える
0

実際にjsonプロパティをウィジェットに直接マップする必要がありますか? そうでない場合は、ウィジェットに json プロパティを設定し、インスタンス化するときに: new myWidget({jsonObj:res}); 次に、this.jsonObj.id; を返す getJsonId() 関数を使用できます。

于 2012-06-11T07:31:23.143 に答える