2009-08-17 58 views
1

謝謝大家提前。這是我第一次開發一個jQuery插件(並且實際上第一次使用JavaScript進行開發),並且我不得不說我非常喜歡(可能有很多可怕的東西給你經驗豐富的js/jquery開發人員,但這是我的第一次嘗試 - 請忍受我:)。我也歡迎任何代碼的任何建設性的批評。jQuery插件開發 - 將參數傳遞給用戶定義的回調函數

這是一個模型框插件(是的,還有其他的,但工作要求規定我編碼我自己以避免第三方依賴),它顯示給定的文本,來自ajax調用的文本或給定/採用的表單從ajax調用,然後通過ajax處理表單提交。這需要儘可能定製,所以我試圖提供一些鉤子(?? - 匿名函數),用戶可以使用它來將自定義代碼傳遞給插件。

我遇到的問題是向用戶功能提供參數。如果我使用關鍵字'this',我可以很好地傳遞'msg'變量,並且用戶函數可以使用它。但是,當我通過'味精'而不是'這個'用戶得到一個空白變量。我想要傳遞的不僅僅是msg - 也是一個在ajax調用中傳遞的數據數組,模型框的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 2009-08-17 14:29:53

+0

剛剛做到了,對此表示遺憾 – 2009-08-17 14:31:26

回答

5

查看call syntax。第一個參數決定什麼this將在回調函數本身內。它是而不是作爲參數傳遞給回調函數。

將參數傳遞給您使用的call其餘參數回調:

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

然後回調將收到兩個參數,並與this指向thisArg運行:

function successHandler(msg, dataArray) {} 

另一個問題你的代碼是this裏面的值你的成功處理程序是沒有意義的。從它看起來會指向window對象。所以你調用的回調函數也將與this == window一起運行。