我有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都在命令中。
答案 0 :(得分:0)
我相信,你的dojo.hitch是在调用post函数时处理的。意味着hitch在SearchWidget中,这将引用它。所以,回调函数实际上是在SearchWidget中...(你在searchwidget中传递dojo.hitch创建的函数 - 而不是调用dojo.hitch。)
我注意到DOJO做的事情真的很棘手。我已经使用全局变量,并且在调用函数的过程中非常明确,以便菊花链式连接多个小部件。 (非常凌乱)