Javascript 在对象中使用dojo.hitch和闭包,在外部对象的方法中?
我使用Dojo声明了一个对象,如下所示(“…”行表示我省略了我认为理解问题不需要的代码):Javascript 在对象中使用dojo.hitch和闭包,在外部对象的方法中?,javascript,dojo,closures,Javascript,Dojo,Closures,我使用Dojo声明了一个对象,如下所示(“…”行表示我省略了我认为理解问题不需要的代码): posttovservice中的dojo.xhrPost调用运行并检索所需的数据。我可以在Firebug的“网络”选项卡中看到请求 问题是无论是args.load还是args.error都不会调用它们应该调用的方法。 我认为原因是,dojo.hitch仅在post请求返回后运行,而它应该在返回后运行,以便this引用外部communityWidgetClass对象。 但是,如果我早些时候调用dojo.hi
posttovservice
中的dojo.xhrPost
调用运行并检索所需的数据。我可以在Firebug的“网络”选项卡中看到请求
问题是无论是args.load
还是args.error
都不会调用它们应该调用的方法。我认为原因是,
dojo.hitch
仅在post请求返回后运行,而它应该在返回后运行,以便this
引用外部communityWidgetClass
对象。但是,如果我早些时候调用
dojo.hitch
,则数据
和错误
对象(我需要传递到xhrLoad
和xhrorr
)不存在
我已经看了一些闭包的例子,包括几个月前我为一个更简单的案例写的一个,但是我不知道如何将它们应用到这个案例中
如何使args.load
能够将数据
(仅存在于XHR post请求末尾)和svcType
(仅存在于post请求之前)参数传递给communityWidgetClass.xhrLoad
方法,类似于args.error
将error
参数传递给communityWidgetClass.xhrError
完全没有
xhrLoad
和xhroror
方法可能更容易,只需将它们的主体移动到args.load
和args.error
中,但这些方法完成后会更大,我认为它们作为args
对象之外的方法更容易阅读和维护。您需要从此
仍具有预期值的范围调用hitch
,而不是在已经混乱的回调中
var args={
…,
load: dojo.hitch(this, function(data) {
// in this function, `this` is bound correctly - so we can call
this.xhrLoad(data, svcType);
}),
// alternatively, just "hitch" the method when the arguments match
error: dojo.hitch(this,'xhrError');
};
太好了,谢谢。有两件事我没有想到:(1)使用内联函数作为挂接的第二个参数,而不是指定函数名及其参数;(2) 在
错误
的情况下,如果参数匹配,则不必为挂接
指定额外的参数。一件小事:您的答案在代码的第6行缺少一个结束括号。如果xhrLoad
确实采取了svcType
第一步:加载:dojo.hitch(这是'xhrLoad',svcType),您甚至可以更进一步
其中数据
参数与“其余”匹配
var args={
…,
load: dojo.hitch(this, function(data) {
// in this function, `this` is bound correctly - so we can call
this.xhrLoad(data, svcType);
}),
// alternatively, just "hitch" the method when the arguments match
error: dojo.hitch(this,'xhrError');
};