亲爱的,
我正在使用dojo.declare在JavaScript中创建类。在其中一个方法中,我有一个AJAX请求。在该请求的load方法中,我需要执行某些方法。这些方法实际上是使用dojo.declare创建的类的方法。我尝试使用this
执行该方法。但它给了我找不到错误的方法。所以我使用dojo.hitch(this,testMethod)
来调用它。它工作正常。现在问题是我在testMethod()
内部还有许多其他方法,它们在内部调用我的JavaScript类的其他方法。到处都有dojo.hitch()真的很痛苦。是否有任何解决方法。
dojo.declare("TestClass",null,{
getData:function(url){
dojo.xhrGet({
url:url,
load: function (response){
dojo.hitch(scope of the current object,testMethod(response))
},
error:function(){
}
});
},
testMethod:function(response){
//calls testMethod2. I think I can use dojo.hitch(this,testMethod3) to call it.
//but I wanted to avoid doing it every time.
},
testMethod2:function(){
//calls testMethod3
},
testMethod3:function(){
//can call other methods.
}
});
答案 0 :(得分:2)
似乎执行范围在此代码中丢失了:
load: function (response){
dojo.hitch(this,testMethod(response))
},
我对您的代码做了一些小改动。现在它应该正常工作。
dojo.declare("TestClass",null,{
getData:function(url){
dojo.xhrGet({
url:url,
load: dojo.hitch(this,this.testMethod),
error:function(){
}
});
},
testMethod:function(response){
this.testMethod2();
},
testMethod2:function(){
this.testMethod3();
},
testMethod3:function(){
//can call other methods.
}
});
答案 1 :(得分:2)
这是典型的背景问题。您正在将一个未被占用的函数作为配置哈希的属性传递,该配置哈希作为参数传递给dojo.xhrGet。
dojo.hitch是向函数添加上下文的正确结构。另一种方法是简单地使用一个闭包。你有什么理由不能这样做:
var me = this;
dojo.xhrGet({
url:url,
load: function(response) {
me.testMethod(response);
}
});
答案 2 :(得分:0)
尝试这样做:
dojo.xhrGet({
url:url,
load: dojo.hitch(this, "testMethod"),
error:function(){
}
});
您的方式也可以,但它可以节省几个字节,并且只需将方法名称用作字符串即可。 Hitch会自动为你传递参数。