在自定义dojo amd模块中的xhr请求之后调用兄弟方法

时间:2013-03-05 16:20:53

标签: javascript dojo amd

我有一个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没有在该对象中定义,而是在“my / module”对象上定义。

method1完成后如何进行method2来电xhr

1 个答案:

答案 0 :(得分:1)

当您进入this函数上下文load是xhr对象时,您需要存储当前this上下文。

一个常见的约定是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
        }
    }
}

DEMO - 存储this以供稍后在另一个闭包中使用