Dijit小部件构造函数抛出“调用链式构造函数”错误

时间:2013-03-24 09:27:50

标签: javascript inheritance widget dojo

我有一个继承自Base的{​​{1}}类。 [_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(){
            ...
        }
    })
});

派生类抛出

  

错误:声明mc.widgets.Derived:使用继承的

调用链式构造函数

1 个答案:

答案 0 :(得分:3)

这种情况正在发生,因为Widget生命周期的constructor部分是使用特殊的链接机制处理的,该机制专为更灵活的Widget创建而设计。您可以read here获取更多信息,但适用于您的情况的部分说明:

  

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

如果您只是从Widget的构造函数方法中删除this.inherited(arguments)调用,则问题将得到解决。 Here is a simple jsfiddle模仿你的Widget设置并演示解决方案。