this.own未在Dojo中定义

时间:2015-01-22 15:58:27

标签: javascript dojo

我尝试使用名为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?

1 个答案:

答案 0 :(得分:1)

您已将dijit/Destroyable列为依赖项,但您实际上并未将声明的构造函数从其中扩展,因此您自己的原型上没有own

而不是declare("...", null, {,您需要declare(destroyable, {(其中destroyable正在替换null)。

注意:

  • 声明的字符串参数已弃用,因为它填充了一个全局命名空间,不鼓励使用AMD。
  • 我建议将destroyable重命名为Destroyable。常见的约定是构造函数以大写字母开头。