Dijit 小部件构造函数抛出“调用链式构造函数”错误
Posted
技术标签:
【中文标题】Dijit 小部件构造函数抛出“调用链式构造函数”错误【英文标题】:Dijit widget constructor throws "calling chained constructor" error 【发布时间】: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:使用继承调用链式构造函数
【问题讨论】:
【参考方案1】:发生这种情况是因为 Widget 生命周期的 constructor
部分是通过一种特殊的链接机制处理的,该机制旨在更灵活地创建 Widget。您可以read here 了解更多信息,但适用于您情况的部分说:
超类构造函数总是被自动调用,并且总是在子类构造函数之前。该约定在 90% 的情况下减少了样板文件。如果它不符合您的需求,请参阅下面的手动构造函数链接。对于所有其他方法,请使用 this.inherited(arguments) 调用同名的超类方法。
如果您只是从 Widget 的构造方法中删除 this.inherited(arguments)
调用,您的问题将得到解决。 Here is a simple jsfiddle 模仿您的 Widget 设置并演示解决方案。
【讨论】:
以上是关于Dijit 小部件构造函数抛出“调用链式构造函数”错误的主要内容,如果未能解决你的问题,请参考以下文章
使用 dijit.byId w dojox.mobile 小部件
如何从 Dijit FilteringSelect 小部件中删除所有选项?
Dojo dijit.form.select:创建新的选择小部件后,旧小部件的选定值无法更改