所以,在我的一个观点中,我有这个功能:
delete_model: function() {
var answer = confirm("Are you sure you want to delete this element?");
if (answer) {
this.model.destroy({
success: function() {
console.log("delete was a success");
}
});
}
});
当我ping通时,Ajax调用结束,后端正确删除模型并返回200标题,其中“OK”作为正文...但成功事件永远不会触发。我错过了什么吗?我该怎么办后端才能解雇这个事件?
答案 0 :(得分:23)
我遇到了同样的问题。对我有用的解决方案是确保从服务器返回与已删除的json模型相对应的json模型。
编辑:返回空的json响应就足够了。
不起作用:
delete(model) {
// deleted model from db
return "Model was deleted";
}
这确实有效:
delete(model) {
// deleted model from db
return model;
}
或:
delete(id) {
// deleted model from db with this id
return new Model {id: id};
}
答案 1 :(得分:3)
使用Backbone 1.5.3和Rails有同样的问题。我尝试了rudena的解决方案,它有效!
这是我的控制器删除功能最初的样子:
def destroy
@cell = current_user.cells.find(params[:id])
@cell.destroy
render :json => "success"
end
这是有效的:
def destroy
@cell = current_user.cells.find(params[:id])
@cell.destroy
render :json => @cell
end
答案 2 :(得分:2)
这对我来说很好,我到处都是这样(除了我有function(model)
但这根本不重要)我知道骨干的旧版本没有使用destroy(options)
但是却有destroy(success, failure)
。你能确定你有最新的版本。
答案 3 :(得分:0)
这个问题也出现了我的UI。在DELETE
后,API返回时发出空200
响应。
正在发生的事情是,jQuery需要一个json响应体,但是当响应返回空时,json解析失败并触发错误回调。
我的解决方案是覆盖模型的sync
方法:
var MyModel = Backbone.Model.extend({
// Fix for empty DELETE response
sync: function(method, model, options) {
if (method === 'delete') {
options.dataType = 'html';
}
Backbone.sync.call(this, method, model, options);
}
});
这是有效的,因为options
被传递给jQuery的ajax
调用,我们正在指示jQuery不要期望json。