1

嗨,我有一个基本模型 -

var BaseModel = Backbone.Model.extend({

            initialize : function(input){
                // Some base initialization implementation common for all Concrete Models
            }, 
            ajaxCall : function(input){

                var dfd = new jQuery.Deferred();
                $.ajax({
                    type: 'Get',
                    url: input.url,
                    success:function(data){

                        // Some on success implementation   
                        dfd.resolve(data);
                    },
                    error:function(){
                        dfd.reject();
                    }
                });

                return dfd.promise();
            }

});

现在,我想创建一个 ConcreteModel 来扩展 BaseModel 的 fetch 函数并覆盖 ajax 成功

var ConcreteModel = BaseModel.extend({

            ajaxCall : function(input){

                   BaseModel.prototype.ajaxCall.call(this, input);

                   // How to override just the ajax success implementation
            }

});

如何在 ConcreteModel 的 ajaxCall 函数中覆盖 ajax 成功实现。

谢谢。

4

2 回答 2

0

您可以将 ajax 调用成功回调定义为基本模型方法之一:

var BaseModel = Backbone.Model.extend({

    initialize : function(input){
        // Some base initialization implementation common for all Concrete Models
    }, 
    ajaxCall : function(input){
        var dfd = new jQuery.Deferred();
        $.ajax({
            type: 'Get',
            url: input.url,
            success:this.onSuccess,
            error:function(){
                dfd.reject();
            }
        });

    return dfd.promise();
    },
    onSuccess: function(data){
        // Some on success implementation   
        dfd.resolve(data);
    }
});

然后只需覆盖ConcreteModel的onSuccess函数中的实现

var ConcreteModel = BaseModel.extend({
    onSuccess: function(data){
        alert("hello from concrete mode: "+data);
    }
});    
于 2013-07-11T06:48:40.270 回答
0

您可以将选项第二个参数传递给 ajaxCall(input, success) ,然后在 ajax 调用中具有:

$.ajax({
    type: 'Get',
    url: input.url,
    success: $.isFunction(success) ? success : function(data){

        // Some on success implementation   
         dfd.resolve(data);
    },
    error:function(){
        dfd.reject();
    }
});

或者你可以存储 ajax 请求

this.ajax = $.ajax({...});

然后在 ConcreteModel 中覆盖它

this.ajax.success(function(){});
于 2013-07-10T22:50:12.187 回答