【问题标题】:Dijit widget constructor throws "calling chained constructor" errorDijit 小部件构造函数抛出“调用链式构造函数”错误
【发布时间】:2013-03-24 09:27:49
【问题描述】:

我有一个继承自 [_WidgetBase, _TemplatedMixin]Base 类。 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:使用继承调用链式构造函数

【问题讨论】:

    标签: javascript inheritance widget dojo


    【解决方案1】:

    发生这种情况是因为 Widget 生命周期的 constructor 部分是通过一种特殊的链接机制处理的,该机制旨在更灵活地创建 Widget。您可以read here 了解更多信息,但适用于您情况的部分说:

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

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

    【讨论】:

      猜你喜欢
      • 2013-01-01
      • 2013-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-15
      • 2012-04-15
      相关资源
      最近更新 更多