this.own Dojo 中未定义
this.own not defined in Dojo
我正在尝试使用名为 loadsth 的方法在 Dojo 中创建单例 class。我想要 o 运行 this.own 来自 foreach 循环。但是,当我 运行 这段代码时,它说
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;
});
我想这与单身class的实施有关。
所以我的实际问题是:当我在 "define" 的依赖列表中有 dijit/Destroyable 时,为什么说 this.own 未定义?
您已将 dijit/Destroyable
列为依赖项,但您实际上并没有使声明的构造函数从它扩展,因此您自己的原型上没有 own
。
而不是 declare("...", null, {
,您需要 declare(destroyable, {
(其中 destroyable
正在替换 null
)。
备注:
- 要声明的字符串参数已弃用,因为它会填充全局命名空间,AMD 不鼓励这样做。
- 我建议将
destroyable
重命名为 Destroyable
。常见的约定是构造函数以大写字母开头。
我正在尝试使用名为 loadsth 的方法在 Dojo 中创建单例 class。我想要 o 运行 this.own 来自 foreach 循环。但是,当我 运行 这段代码时,它说
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;
});
我想这与单身class的实施有关。
所以我的实际问题是:当我在 "define" 的依赖列表中有 dijit/Destroyable 时,为什么说 this.own 未定义?
您已将 dijit/Destroyable
列为依赖项,但您实际上并没有使声明的构造函数从它扩展,因此您自己的原型上没有 own
。
而不是 declare("...", null, {
,您需要 declare(destroyable, {
(其中 destroyable
正在替换 null
)。
备注:
- 要声明的字符串参数已弃用,因为它会填充全局命名空间,AMD 不鼓励这样做。
- 我建议将
destroyable
重命名为Destroyable
。常见的约定是构造函数以大写字母开头。