이전 도장을 1.8로 업그레이드 중입니다. 우리의 아약스 요청 처리를 위해 우리는 장식 예를 들어, 응답 내용에 따라 어떤 경우 리디렉션을 수행합니다 (물론, 기능 래퍼)을 가지고 : 도장에,콜백 함수에서 ioArg 액세스하기
// Decorator func:
var redirectDecorator = function(func) {
var f = function(data, ioArgs) {
if(data.redirect) {
// A manual location redirect:
window.location.href = data.redirect;
if(data.redirect_xhr) {
// clone ioArgs, spawn new request to follow redirect etc
// <snip>
} else {
func(response);
}
}
return f;
}
// Used like so:
dojo.xhrPost({
url: url
handleAs: "json",
form: form,
load: redirectDecorator(function(data, ioArgs) {
// do stuff
})
});
이제 1.8합니다 (dojo/request/xhr 모듈) xhr()
은 체인에 대해 Deferred
을 반환하며 콜백에는 인수 만 제공됩니다 (아니 ioArgs
- 분명히 이것들이 약속에 첨부되어 있습니다 - http://bugs.dojotoolkit.org/ticket/12126 참조). 즉
은, 위의 Ajax 호출이된다 :
xhr.post(url, {
handleAs: "json",
form: form
}).then(function(data) {
// do stuff
});
문제는, ioArgs
가 제공되지 않기 때문에 나는 더 이상 익명 함수를 래핑 할 수 없습니다. 체인 연결을 끊음으로써 연기 된 것을 검사하는 것은 작동하지 않는 것으로 보이고, 내가 원하는 것보다 더 많은 리엔지니어링을 요구할 것입니다.
아이디어가 있으십니까?
감사합니다. (#dojo에도 도움을주십시오.) dojo/request
에서 반환
// Decorator func:
var redirectDecorator = function(func) {
var f = function(response) {
var data = response.data;
if(data.redirect) {
// A manual location redirect:
window.location.href = data.redirect;
if(data.redirect_xhr) {
request(data.redirect_xhr, response.options).then(func);
} // more conditions follow.
}
return f;
}
request.post(url, {
handleAs: "json",
form: form
}).response.then(redirectDecorator(function(response) { // <-- note .response.then(
// do stuff where data is response.data
}));