dojo Widget Id Conflict

时间:2012-06-08 14:50:13

标签: dojo

我像这样写了我的dojo Widgets的ctor。

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

我使用JSON响应将小部件实例化为ctor参数。比如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

我无法将JSON响应更改为subject_id之类的输出,因为它需要更改很多内容。

我需要在小部件实例化后获取该ID。

那么处理这个问题的好设计是什么?

2 个答案:

答案 0 :(得分: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方法。

答案 1 :(得分:0)

您是否真的需要直接将json属性映射到窗口小部件? 如果没有,那么在你的小部件中只有一个json属性,并在实例化时:new myWidget({jsonObj:res}); 然后你可以有一个getJsonId()函数返回this.jsonObj.id;