我正在尝试使用称为loadsth的方法在Dojo中创建单例类。我想在那里从一个foreach循环中运行this.own。但是,当我运行此代码时,它说
TypeError: this.own is not a function
我查看了Dojo文档和脚本,并说“ own”方法是dijit / Destroyable的一部分。但是,尽管包含了它,但是它不起作用。我在// @ 1和// @ 2的位置尝试过。我实际上需要在/// @ 2位置使用它,但是想确保foreach循环不会隐藏“ this”。所以我尝试了// @ 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;
});
我想这与单个类的实现有关。
所以我的实际问题是:为什么当我在“定义”的依赖项列表中有dijit / Destroyable时,为什么没有定义this.own?
最佳答案
您已将dijit/Destroyable
列为依赖项,但实际上并没有使声明的构造函数从其扩展,因此您自己的原型上没有own
。
您需要的是declare("...", null, {
(而不是declare(destroyable, {
)(其中destroyable
替换了null
)。
笔记:
不赞成使用声明的字符串参数,因为它填充了一个不鼓励使用的全局名称空间。
我建议将destroyable
重命名为Destroyable
。构造函数的通用约定以大写字母开头。
关于javascript - Dojo中未定义的this.own,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28093205/