Javascript 在对象中使用dojo.hitch和闭包,在外部对象的方法中?

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

我使用Dojo声明了一个对象,如下所示(“…”行表示我省略了我认为理解问题不需要的代码):

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');
};