3

我有一个Base继承自[_WidgetBase, _TemplatedMixin]. Base工作正常。现在我Base在另一个不起作用的类中继承了它

define([
   "dojo/_base/declare", "dojo/parser", ...
], function(declare, parser, ...){
    return declare("mc.widgets.Base", [_WidgetBase, _TemplatedMixin], {
        templateString: 
            '<div class="mc-note-base">'+
            '</div>',
        constructor: function(argv){
            var self = this.inherited(arguments);
            return self;
        },
        data: function(){

        },
        postCreate: function(){
            ...
        }
    })
});

派生类

define([
    "dojo/_base/declare", "mc/base/path", "mc/widgets/Base"
], function(declare, path, Base){
    return declare("mc.widgets.Derived", [Base], {});
})

派生类抛出

错误:声明 mc.widgets.Derived:使用继承调用链式构造函数

4

1 回答 1

4

发生这种情况是因为constructorWidget 生命周期的一部分是通过一种特殊的链接机制来处理的,该机制专为更灵活的 Widget 创建而设计。您可以在此处阅读更多信息,但适用于您的情况的部分说:

超类构造函数总是被自动调用,并且总是在子类构造函数之前。该约定在 90% 的情况下减少了样板文件。如果它不符合您的需求,请参阅下面的手动构造函数链接。对于所有其他方法,使用 this.inherited(arguments) 调用同名的超类方法。

如果您只是this.inherited(arguments)从 Widget 的构造方法中删除调用,您的问题将得到解决。这是一个简单的 jsfiddle,它模仿您的 Widget 设置并演示了解决方案。

于 2013-03-24T19:50:59.620 回答