2012-08-06 4 views
3

jQuery의 promise 객체에 의해 트리거 된 콜백 함수에 매개 변수를 전달할 수있는 방법을 파악하려고합니다.jQuery 매개 변수가있는 약속 콜백

var formObject = { 
    call : function(thisForm, thisUrl, thisArray, thisCallback) { 
     "use strict"; 
     var thisMethod = thisForm.attr('method').toUpperCase(); 
     var thisPromise = $.ajax({ 
      type : thisMethod, 
      url : thisUrl, 
      dataType : 'json', 
      data : thisArray, 
      cache : false 
     }); 
     thisPromise.done(thisCallback(data, textStatus, jqXHR)); 
     thisPromise.fail(formObject.topError(jqXHR, textStatus, errorThrown)); 
    } 
}; 

완료의 매개 변수() 실패() 메소드가 잘못된 -하지만 내가 알아 내기 위해 노력하고있어 정확히 무엇 : 아약스 다음 약속 메소드를 호출 내 방법은 다음과 같습니다. - 아래의 라인이 잘 작동합니다

var formObject = { 
    call : function(thisForm, thisUrl, thisArray, thisCallback) { 
     "use strict"; 
     var thisMethod = thisForm.attr('method').toUpperCase(); 
     var thisPromise = $.ajax({ 
      type : thisMethod, 
      url : thisUrl, 
      dataType : 'json', 
      data : thisArray, 
      cache : false 
     }); 
     thisPromise.done(function(data, textStatus, jqXHR) { 
       thisCallback(/* additional parameters*/) 
     }); 
.......................... 
    } 
}; 

답변

2

추가 폐쇄를 제공 할 필요가 없습니다 :

+0

감사합니다 Alnitak -이 하나가 좋을까요? : https://gist.github.com/3140164 –

+0

@SpencerMark 네, 그 중 하나는 괜찮을 겁니다. – Alnitak

1

+0

이것은 작동하지 않습니다 – Alnitak

+0

@alnitak, 'thisCallback'과'formObject.topError' 존재에 대해 아무것도 모른다는 전제로 ... 왜 작동하지 않아야합니까? 매개 변수가 부족하여 방금 내 대답을 업데이트 한 경우 : – fcalderan

+0

예, 매개 변수가 부족합니다. 매개 변수는 OP 코드에 나와 있습니다. 물론 제공된 함수가 콜백과 동일한 매개 변수를 전달한다는 사실을 알아야합니다 ... – Alnitak

1

사용 폐쇄 함수 내에서 콜백을 모두 포장 대신

thisPromise.done(function(data, textStatus, jqXHR) { 
    thisCallback(data, textStatus, jqXHR); 
}); 
thisPromise.fail(function(jqXHR, textStatus, errorThrown) { 
    formObject.topError(jqXHR, textStatus, errorThrown); 
}); 

를 작성하려고 :

thisPromise.done(thisCallback); 
thisPromise.fail(formObject.topError.bind(formObject)); 

done 콜백은 $.ajax에 의해 제공되는 data, textStatus, jqXHR 매개 변수를 전달합니다. 이 줄은 제공된 콜백 함수를 직접 등록하는 것입니다. 내가 this 올바르게 formObject로 설정되어 있는지 확인하려면 여기를 .bind을 사용한 것을 제외하고

fail 콜백 마찬가지로 오른쪽 매개 변수를 얻을 것이다. 이 코드가 ES5 이전 브라우저에서 사용되는 경우 .bind에 대한 심을 설치하십시오. 위에 링크 된 모질라 사이트에 하나가 있습니다.