我尝试使用名为loadsth的方法在Dojo中创建单例类。在那里我想从foreach循环中运行this.own。但是,当我运行此代码时,它说
TypeError: this.own is not a function
我查看了Dojo文档和脚本,并在那里说方法"拥有"是dijit / Destroyable的一部分。但是虽然它包括在内但它不起作用。我在// @ 1和// @ 2的位置试了一下。我实际上需要它在// @ 2的位置,但是想确保foreach循环不会隐藏"这个"。所以我尝试了// @ 1,但这也不起作用。
define([
"dojo/_base/declare",
"dijit/Destroyable"
], function (
declare,
destroyable
) {
var SingletonClass = declare("some.Class", null, {
_registerdPropertyGrids: [],
_resourceNode: "",
/*
* This method is used register a property grid plus
* provide the properties that should be shown in that
* grid.
*/
registerWidget: function(widgetName, propertyGridWidget) {
console.log(widgetName);
this._registerdPropertyGrids.push({widgetName, propertyGridWidget});
},
/*
* Sets the resource node for this widget.
*/
setResourceNode: function(resourceNode) {
this._resourceNode = resourceNode;
},
/*
* Loads sth.
*/
loadSth: function() {
console.log("load");
//var deferred = this.own(...)[0]; // @1
this._registerdPropertyGrids.forEach(function(element, index, array) {
console.log('_registerdPropertyGrids[' + index + '] = ' + element.widgetName);
var deferred = this.own(...)[0]; // @2
}, this);
}
});
if (!_instance) {
var _instance = new SingletonClass();
}
return _instance;
});
我认为它与单一类的实现有一些共同点。
所以我的实际问题是:为什么当我在" define"的依赖列表中有dijit / Destroyable时,没有定义this.own?
答案 0 :(得分:1)
您已将dijit/Destroyable
列为依赖项,但您实际上并未将声明的构造函数从其中扩展,因此您自己的原型上没有own
而不是declare("...", null, {
,您需要declare(destroyable, {
(其中destroyable
正在替换null
)。
注意:
destroyable
重命名为Destroyable
。常见的约定是构造函数以大写字母开头。