2012-11-14 4 views
0

이전 도장을 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 
})); 

답변

관련 문제