0

这是我的问题。

我正在使用 Backbone js,我定义的每个集合都需要对保存或销毁进行相同的检查。除了销毁成功函数需要传递一个元素以在销毁成功时从页面中删除。

我不想将相同的代码复制并粘贴到每个保存或销毁方法中,所以我创建了这个:

window.SAVE_TYPE_DESTROY = 'destroy';

window.SaveResponseHandler = function(el,type){
    if (!type){
        this.success = function() {
            this._success();
        };
    }else if (type == window.SAVE_TYPE_DESTROY){
        this.success = function() {
            this._success();
            $(el).remove();
        };
    }

};
SaveResponseHandler.prototype._success = function(model, response, options) {
                if ((response.success * 1) === 0) {
                    persistError(model, {
                        responseText: response.message
                    }, {});
                }
            };
SaveResponseHandler.prototype.error = persistError;

var saveResponseHandler = new SaveResponseHandler();

我像这样使用它:

 destroy: function() {
        var el = this.el;
        var model = this.model;
        this.model.destroy(new SaveResponseHandler(el,'destroy'));
    },
    change: function() {
        this.model.set({
            job_category_name: $($(this.el).find('input')[0]).val()
        });
        var viewView = this.viewView;
        this.model.save(null, saveResponseHandler);
    }

问题是当调用成功时出现以下错误:

未捕获的类型错误:对象 [对象窗口] 没有方法 '_success'

任何帮助都感激不尽。我也愿意接受有关更好的处理方法的任何建议。

4

1 回答 1

1

this里面SaveResponseHandler.success不是SaveResponseHandler,是window

window.SaveResponseHandler = function(el, type) {
    var self = this;

    if (!type) {
        this.success = function() {
            self._success();
        };
    } else if (type == window.SAVE_TYPE_DESTROY) {
        this.success = function() {
            self._success();
            $(el).remove();
        };
    }
};

http://jsfiddle.net/ethagnawl/VmM5z/

于 2013-03-20T01:24:22.467 回答