destroy()不发送DELETE请求

时间:2013-05-17 19:11:25

标签: backbone.js backbone-model

我知道这已被多次询问,但我无法找到解决问题的方法。在所有其他问题中,答案与ID未设置或其他类似_id等有关。

我没有任何自定义同步或销毁方法。一切都是标准的。

我的模特和收藏品:

class Load extends Backbone.Model
    localStorage: new Backbone.LocalStorage 'relodr.load'
    urlRoot: relodr.api.url + "loads/"
class Loads extends Backbone.Collection
    model = Load
    localStorage: new Backbone.LocalStorage 'relodr.loads'
    url: relodr.api.url + "loads/"

这是我要删除模型的地方:

delete: (e) =>
        f = $(e.currentTarget)
        id = $(f.parent()).attr("data-id") 
        load = new Loads()
        load.fetch()
        model = load.get id
        console.log model
        model.destroy()

模型已从集合中删除,但DELETE从未发送到服务器。

这是console.log模型:

Backbone.Model {cid: "c5", attributes: Object, collection: Loads, _changing: false,     _previousAttributes: Object…}
    _changing: false
    _events: Object
    _pending: false
    _previousAttributes: Object
    attributes: Object
    changed: Object
    cid: "c5"
    id: 2
    __proto__: Object

所以我有一个模型的ID,我的模型确实有一个URL集。

如果我这样做:

model = new Load
    id: 99
model.destroy()

它有效,DELETE请求虽然以500错误(obviasly)返回,但仍会发送。所以它告诉我网址等正确并正常工作..

我不确定为什么我的破坏方法不起作用。

更新

有趣的是,当我记录上面创建的模型时,它看起来像这样:

Load {cid: "c6", attributes: Object, _changing: false, _previousAttributes: Object, changed: Object…}

所以那个说Load(模型的名称)和另一个Backbone.Model

2 个答案:

答案 0 :(得分:3)

我的猜测是你可能没有为你的模型设置urlRoot属性。

答案 1 :(得分:-1)

我最近碰到了这个。这不是一个Backbone问题,而是一个jQuery问题。 jQuery问题默认为'json'的dataType,并且它期望数据中有JSON有效负载,所以当你发出调用时,jQuery实际上放弃了DELETE。

要解决这个问题,请尝试使用一些将传递给jQuery.ajax的选项进行删除:

model.delete({
    type: 'text',
    contentType : 'text/plain'
});

我发现这就像魅力一样。