0

每当我使用 Backbone 执行 model.destroy() 时,它都会尝试在以下 URL 上执行 DELETE 请求:

http://localhost:8000/api/v1/item/?format=json

由于我正在对模型进行销毁,因此我希望应该传递模型的 ID,因此执行 DELETE 请求的 URL 将是:

http://localhost:8000/api/v1/item/8/?format=json

其中指定了 ID。由于缺少 ID,以及我使用了美味的派,所有项目都被删除。如何使 URL 包含我要删除的项目的 ID?

4

1 回答 1

2

我猜你的模型看起来像这样:

var M = Backbone.Model.extend({
    url: '/api/v1/item/?format=json',
    // ...
});

模型的urlfor 应该是一个函数,但由于它最终会通过内部getValue函数,因此字符串也将“工作”;如果您检查我链接到的源,您会明白为什么一个字符串url会为您提供您所看到的结果。

解决方案是url按照您应该使用的功能:

网址 model.url()

返回模型资源在服务器上的相对 URL。如果您的模型位于其他地方,请使用正确的逻辑覆盖此方法。生成表单的 URL: ,如果模型不是集合的一部分,则"/[collection.url]/[id]"回退到。"/[urlRoot]/id"

你可能想要这样的东西:

url: function() {
    if(this.isNew())
        return '/api/v1/item/?format=json';
    return '/api/v1/item/' + encodeURIComponent(this.id) + '/?format=json';
}

或这个:

url: function() {
    if(this.isNew())
        return '/api/v1/item/?format=json';
    return '/api/v1/item/' + encodeURIComponent(this.get('id')) + '/?format=json';
}
于 2012-04-17T05:07:56.707 回答