Dijit小部件构造函数抛出“调用链式构造函数”;错误
Dijit widget constructor throws "calling chained constructor" error
我有一个继承自[_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:调用链接构造函数继承
之所以会发生这种情况,是因为Widget生命周期的constructor
部分是用一种特殊的链接机制处理的,这种机制是为更灵活地创建Widget而设计的。你可以在这里阅读更多信息,但适用于你的情况的部分是:
父类构造函数总是自动调用,并且总是在子类构造函数之前调用。这种惯例在90%的情况下减少了样板文件。如果它不能满足你的需要,请参阅下面的手动构造函数链接。对于所有其他方法,使用this.inherited(arguments)调用同名的父类方法。
如果您简单地从您的Widget的构造方法中删除this.inherited(arguments)
调用,您的问题将得到解决。下面是一个简单的示例,它模拟了Widget的设置并演示了解决方案。
相关文章:
- Typescript从类的构造函数调用方法
- 不带括号的构造函数调用
- 高级Javascript:检测当前函数是否由构造函数调用
- 从构造函数调用类方法
- JS私有方法不会在每个构造函数调用时重新定义
- 在 JavaScript 中,构造函数和作为构造函数调用的返回对象的函数之间有什么区别
- 构造函数调用的快捷方式
- 当调用返回相同对象的函数时,无论是否作为构造函数调用,我都应该使用“new”吗
- 检查构造函数调用是否来自扩展类
- 理解构造函数调用模式中的“this”
- 理解Javascript中作为方法和构造函数调用的函数的隐私性和作用域
- 创建不能作为构造函数调用的 JavaScript 函数
- 在Javascript中查看构造函数调用的另一种方法
- 拦截Javascript中的构造函数调用
- javascript中使用构造函数调用函数
- 如何从构造函数调用另一个Javascript文件中的函数
- 从jQuery插件构造函数调用公共方法
- 将this.constructor与构造函数调用一起使用以访问静态属性时是否存在兼容性问题
- 绑定函数作为构造函数调用
- Dojo无参数构造函数调用带有参数的基构造函数