Dojo 1.6 で延期された ajax リクエストのヒッチングとチェーン化で小さな問題が発生しました。コードは次のようになります
login : function(data) {
var def = lang.hitch(this.authenticate, this.authenticate(data));
console.log(def); // [I]
return def;
},
authenticate : function(data) {
require([ "dojo/Deferred", "dojo/request/xhr", "dojo/_base/lang",
"dojox/encoding/digests/MD5" ], lang.hitch(this, function(Deferred, xhr,
lang, MD5) {
var data2send = lang.mixin(data, {
action : "authenticate",
password : "21232f297a57a5a743894a0e4a801fc3",
userId : data.username
});
return xhr(this.handlerUrl, {
handleAs : "json",
method : "POST",
sync : false,
data : data2send
});
}));
}
login() が呼び出される場所。私見では、authenticate() の ajax-request が終了した後に解決される Deferred-object を返す必要があります。したがって、[I] にログインすると Deferred-promise が返されるはずですが、Firebug は戻り値を function() としてログに記録しています。誰でも助けてくれることを願っています。
前もって感謝します!
編集: 別の質問は、def がオブジェクトになる理由です。これは、lang.hitch の最初の引数によって指定されます。たとえば、ログの上のコードでは、「function()」が表示されます。最初の引数を「this」に変更すると、ログには「this」オブジェクト (「Object {...}」) 自体が表示されます。ヒッチのメカニズムは戻り値に影響を与えず、スコープを2番目の引数(呼び出された関数)にのみヒッチすると仮定しました。私が間違っている?!