2012-12-10 37 views
0

我是一個新手,試圖將代碼從原型轉換爲JQuery。我正在通過基礎知識,但堅持下面的代碼。我試過使用jQuery的程度,但不能解決它。這裏是代碼,我非常感謝一些幫助。原型到JQuery轉換 - 堅持class.create

var SaveForm = Class.create(); 
SaveForm.prototype = { 
    formId: null, 
    responseText: null, 

    initialize: function(formId) 
    { 
      this.formId = formId; 
    }, 
    sendRequest: function(idform) 
    { 
      var referenceThis = this; 
      $(idform).request(
      { 
         onSuccess: function(transport) 
         { 
           referenceThis.responseText = transport.responseText; 
           referenceThis.onSuccess(); 
         }, 
         onFailure: function(transport) 
         { 
           referenceThis.responseText = transport.responseText; 
           referenceThis.onFailure(); 
         } 
      }); 
    }, 
    onSuccess: function() 
    { 
    }, 
    onFailure: function() 
    { 
    } 
} 
+2

類的繼承是jQuery的範圍之內,我會建議使用的這樣做的許多現有的預構建的方法之一(jQuery的不附帶一個內置。) –

回答

0

jQuery是爲DOM,事件處理,Ajax和動畫製作的。創建「類」不在其範圍內。

但是,您可以輕鬆地將其轉換爲一個簡單的純JavaScript構造函數和原型方法:

function SaveForm(formId) { 
    this.formId = formId; 
    this.responseText = null; 
} 
SaveForm.prototype.sendRequest = function(idform){ 
    var _this = this; 
    $(idform).request({ 
     onSuccess: function(transport){ 
      _this.responseText = transport.responseText; 
      _this.onSuccess(); 
     }, 
     onFailure: function(transport){ 
      _this.responseText = transport.responseText; 
      _this.onFailure(); 
     } 
    }); 
}; 
SaveForm.prototype.onSuccess = function(){}; 
SaveForm.prototype.onFailure = function(){}; 

但是,我不知道它的這些方法的實際需要。 jQuery沒有request方法,並且只需使用功能強大的$.ajax函數和Deffereds功能來完成Ajax請求。聽起來像是你需要的是

function submitForm(id) { 
    var $form = $('#'+id); 
    return $.ajax({ 
     url: $form.attr("target"), 
     method: $form.attr("method"), 
     data: $form.serialize(), 
     dataType: "html" 
    }); 
} 
// Usage: 
submitForm("myForm") 
    .done(function onSuccess(responseText) {…}) 
    .fail(function onFailure(error) {…}); 
+0

我發現重寫代碼並使用$ .ajax是最好的方法。謝謝你的幫助。 –

+0

很高興能有所幫助,您可以接受答案:-) – Bergi

0

翻譯會看起來像: - 你不需要使用「Class.create()」 - 你必須使用新的「新」創建一個新的SaveForm實例 時 - 變「 referenceThis'to _this。

爲什麼你通過formId 2次?只有一次初始化應該足夠了

var SaveForm = function(){ 
    this.formId; 
    this.responseText; 
}; 

SaveForm.prototype.initialize = function(formId){ 
    this.formId = formId; 
} 

SaveForm.prototype.sendRequest = function(idform){ 
    var _this = this; 
    $(idform).request({ 
     onSuccess: function(transport){ 
      _this.responseText = transport.responseText; 
      _this.onSuccess(); 
     }, 
     onFailure: function(transport){ 
      _this.responseText = transport.responseText; 
      _this.onFailure(); 
     } 
    }); 
}; 

SaveForm.prototype.onSuccess = function(){}; 
SaveForm.prototype.onFailure = function(){}; 


var form = new SaveForm(); // 'new' is very important!! 
form.initialize('myId'); 
+0

廢話:'this.formId;' – Victor