Backbone.Model.destroy在成功时不触发成功功能

时间:2011-08-08 21:30:43

标签: backbone.js

所以,在我的一个观点中,我有这个功能:

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”作为正文...但成功事件永远不会触发。我错过了什么吗?我该怎么办后端才能解雇这个事件?

4 个答案:

答案 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。

相关问题