1

我有一个用于 dojo 的 amd 的自定义模块,如下所示:

define(
  "my/moduleName",
  [//dependencies], 
  function(xhr) {
    return {
      method1: function() {
        xhr.get({
          url: "myurl",
          load: function(data) {
            //handle data
            this.method2(data) //< THIS CAUSES ERROR: 'this.method2 is not a function'
          }
        });
      },

      method2: function(data) {
        //process data
      }
    }
}

我怀疑我的问题是xhr.get创建了一个延迟对象,并且method2没有在该对象中定义,而是在“我的/模块”对象上定义。

完成后如何method1拨打电话?method2xhr

4

1 回答 1

1

您需要存储当前this上下文,因为一旦您在load函数上下文this中就是 xhr 对象。

var that = this;然后that根据需要在任何其他闭包内使用通用约定。

在调用之前存储this类似于这样:

define(
    "my/moduleName", [ //dependencies], 
function (xhr) {
    return {
        method1: function () {
            var that = this; //<-- store this context

            xhr.get({
                url: "myurl",
                load: function (data) {
                    //handle data
                    that.method2(data); //<-- use that , the stored context
                }
            });
        },

        method2: function (data) {
            //process data
        }
    }
}

演示- 存储this以备后用在另一个封闭


于 2013-03-05T16:29:16.470 回答