在两个类之间的回调函数上使用dojo.hitch的问题

时间:2010-07-16 21:07:04

标签: dojo

我有2个dijit小部件模板类,我试图从另一个调用一个,但是我遇到了dojo.hitch和scope的问题:

我在searchvehicleswidget中并调用第二个小部件,commandswidget:

this.CommandsWidget.Post("vehicle/getconfiguration/", request, dojo.hitch(this.CommandsWidget, this.CommandsWidget.FillForms));

然后在commandswidget中调用Post函数:

Post: function(path, request, callbackFunction) {
            console.debug("in post");
            console.debug(this);
            dojo.xhrPost({
                url: baseUrl + path,
                handleAs: 'json',
                timeout: 60000,
                content: request,
                contentType: "application/x-www-form-urlencoded",
                load: dojo.hitch(this, function(result) {
                    console.debug("in callback function");
                    console.debug(this);
                    callbackFunction();
                }),
                error: function(error, args) { AjaxError(error, args, path, request, callbackFunction); }
            });
        }

然后调用最初传入的回调函数FillForms:

FillForms: function(json) {
            console.debug("in fillforms");
            console.debug(this);
}

当它调用Post函数时,范围是CommandsWidget,这是正确的。即使我们进入xhrPost加载的返回函数,范围仍然正确,CommandsWidget。但是,当我调用调用FillForms()的“callbackFunction();”时,范围将恢复为SearchVehiclesWidget!即使我将该调用包装在dojo.hitch(this,callbackFunction)中,它仍然具有SearchVehiclesWidget的范围。

任何人都对可能出现的问题以及如何解决问题有任何见解?

不,CommandsWidget是Commands类的实例,SearchVehiclesWidget是SearchVehicles类的实例。是的,FillForms和Post都在命令中。

1 个答案:

答案 0 :(得分:0)

我相信,你的dojo.hitch是在调用post函数时处理的。意味着hitch在SearchWidget中,这将引用它。所以,回调函数实际上是在SearchWidget中...(你在searchwidget中传递dojo.hitch创建的函数 - 而不是调用dojo.hitch。)

我注意到DOJO做的事情真的很棘手。我已经使用全局变量,并且在调用函数的过程中非常明确,以便菊花链式连接多个小部件。 (非常凌乱)