我有一个自定义模块的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"对象上定义。
xhr
完成后,method1
如何呼叫method2
?
您需要存储当前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
}
}
}
DEMO -存储this
以便以后在另一个闭包中使用