2012-12-10 4 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를이 Ajax와 애니메이션, 이벤트 처리, DOM 위해 만든해야한다. "클래스"를 만드는 것은 그 범위에 속하지 않습니다.

그러나, 당신은 쉽게 자바 스크립트 생성자 함수 프로토 타입 방법 간단한 일반에 변환 할 수

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 요청을 수행하는 데는 강력한 함수와 Defereds 기능 만 사용하면됩니다. 모두 당신이 필요

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 예를 만들 때 - 변화를 ' 이쪽을 참조하십시오.

왜 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

Nonsense :'this.formId; ' – Victor

관련 문제