我有一个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
?
答案 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
以供稍后在另一个闭包中使用