我像这样写了我的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。
那么处理这个问题的好设计是什么?
答案 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;