0

我是一个试图将代码从原型转换为 JQuery 的新手。我正在了解基础知识,但我坚持使用下面的代码。我尝试过使用 jquery 范围,但无法解决。这是代码,我非常感谢一些帮助。

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()
    {
    }
}
4

2 回答 2

0

翻译看起来像这样: - 您不需要使用 'Class.create()' - 在创建新的 SaveForm 实例时必须使用新的 'new' - 将 'referenceThis' 更改为 _this。

为什么要传递 2 倍的 formId?初始化中只有一次就足够了

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');
于 2012-12-11T01:15:12.660 回答
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 请求只需要使用强大的$.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) {…});
于 2012-12-11T01:25:41.090 回答