这个是这样的,例子在定义Task的时候,将Option中的Success和Error重新定义了。如果寻这个思路,去处理,那么对于用户定义的回调函数将不会处理,原因是在定义Task时重新定义的事件覆盖了原来用户定义的事件。
处理也比较简单,就是在重新定义的回调函数中,调用用户的回调函数即可。
例如,示例中(jquery-binding.js):
$.ajaxAsync = function (options) {
return Task.create(function (t) {
options.success = function (data, textStatus, jqXHR) {
t.complete("success", {
data: data,
textStatus: textStatus,
jqXHR: jqXHR
});
}
options.error = function (jqXHR, textStatus, errorThrow) {
t.complete("failure", {
jqXHR: jqXHR,
textStatus: textStatus,
errorThrow: errorThrow
});
};
$.ajax(options);
});
};
那么如果用户定义了success事件或者error事件怎么处理呢?
$.ajaxAsync = function (options) {
return Task.create(function (t) {
var successFunc=options.success;
options.success = function (data, textStatus, jqXHR) {
if(successFunc) successFunc(data, textStatus, jqXHR);
t.complete("success");
}
options.error = function (jqXHR, textStatus, errorThrow) {
t.complete("failure", {
jqXHR: jqXHR,
textStatus: textStatus,
errorThrow: errorThrow
});
};
$.ajax(options);
});
};
这里需要注意的是要定义一个中间变量来传递对用户定义的事件的引用,否则会造成循环引用;另外需要注意调用的位置应该是在t.complete('success')之前。