这是我的问题。
我正在使用Backbone js,我定义的每个集合都需要对save或destroy进行相同的检查。除了销毁成功函数需要传递一个元素,以便在销毁成功时从页面中删除。
我不想将相同的代码复制并粘贴到每个save或destroy方法中,所以我创建了这个:
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);
}
问题是调用成功时出现以下错误:
未捕获的TypeError:对象[对象窗口]没有方法'_success'
任何帮助将不胜感激。我也对任何有关处理这个问题的更好方法的建议持开放态度。
答案 0 :(得分:1)
this
内的{p> 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();
};
}
};