2009-08-17 2 views
1

미리 감사드립니다. 이것은 처음으로 jQuery 플러그인을 개발하고 (처음에는 자바 스크립트에서도 실제로 개발되었다.) 꽤 귀찮다는 말을해야한다. (js/jquery 개발자에게 노련한 것들이 많이있다. 첫 번째 시도 - 나와 함께하시기 바랍니다 :). 나는 어떤 코드에 대해서도 건설적인 비판을 환영한다.jQuery 플러그인 개발 - 사용자 정의 콜백 함수에 매개 변수 전달

이것은 모델 상자 플러그인입니다 (예, 다른 것들이 있지만 작업 요구 사항에 따라 제 3 자 종속성을 피하기 위해 제 자신을 코드화해야 함). 주어진 텍스트, ajax 호출의 텍스트 또는 주어진/주어진 양식을 표시합니다. ajax 호출에서 가져온 다음 ajax를 통해 양식 제출을 처리합니다. 이것은 가능한 한 사용자 정의가 가능해야하므로 사용자가 플러그인에 사용자 정의 코드를 전달하는 데 사용할 수있는 후크 (- 익명 함수)를 제공하려고합니다.

문제점은 사용자 기능에 매개 변수를 제공하는 것입니다. 'this'라는 키워드를 사용하면 'msg'변수를 잘 전달할 수 있으며 사용자 함수가이를 사용할 수 있습니다. 그러나 'this'대신 'msg'를 전달하면 사용자는 빈 변수를 얻습니다. msg 이상 - 아약스 호출에서 전달되는 데이터의 배열과 모델 상자의 jQuery 객체를 전달하고 싶습니다. 실제로 수행하고자하는 작업입니다.

다음은 스 니펫입니다.이 함수는 플러그인 내부에 있고 플러그인 내에서 호출됩니다. 필자는 조직/개발 목적으로 일부 코드를 그룹화했습니다.

// Submits the form inside of the model box 
    // and calls the user hooks of onFormSuccess and 
    // onFormFailure for ajax success and error 
    function submitForm() { 
     var URL = $('form',$contentNode).attr('action'), 
     method = $('form',$contentNode).attr('method'), 
     data = $('form',$contentNode).formSerialize(); 

     $.ajax({ 
      url: URL, 
      type: method, 
      data: data, 
      success: function(msg) { 
       // Doesn't work, but I would like it too 
       //settings.onFormSuccess.call(msg, breakData(data)); 
       // Does work 
       settings.onFormSuccess.call(this); 
      }, 
      error: function (XMLHttpRequest, textStatus, errorThrown) { 
       setings.onFormFailure.call(errorThrown); 
      } 
     }); 
     closeModel(); 
    } 
+0

tl dr; 더 짧은 예제를 제공해 줄 수 있습니까? – Greg

+0

그냥 미안 해요. –

답변

5

call syntax을 참조하십시오. 첫 번째 매개 변수는 this이 콜백 함수 자체에 포함될 내용을 결정합니다. 이 아니며 콜백 함수의 매개 변수로이 전달되지 않습니다.

call의 나머지 매개 변수를 사용하여 콜백 매개 변수를 전달하려면 :

settings.onFormSuccess.call(thisArg, msg, dataArray); 

콜백은 두 개의 매개 변수를 받고, thisthisArg를 가리키는으로 실행됩니다

function successHandler(msg, dataArray) {} 

또 다른 문제를 귀하의 코드와 함께 this 성공 처리기의 의미는 가치가 없습니다. 보이는대로부터 window 개체를 가리 킵니다. 콜백은 this == window으로 실행됩니다.

관련 문제