0

我这样写 My dojo Widgets 的 ctor。

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

我用 JSON 响应作为 ctor 参数来实例化小部件。likenew 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另一个主题

而且我无法更改 JSON 对输出的响应,subject_id因为它需要更改很多东西。

我需要在小部件实例化后获取该 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 回答