model.destroy()的问题

时间:2012-04-17 04:31:13

标签: javascript backbone.js

每当我使用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,而且我使用tastypie,所有项目都会被删除。如何设置URL以包含我要删除的项目的ID?

1 个答案:

答案 0 :(得分:2)

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

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

模型的url应该是一个函数,但是,因为ends up going through内部getValue函数,字符串也会工作&#34 ;;如果您查看我关联的来源,您就会明白为什么url的字符串会为您提供您所看到的结果。

解决方法是使用url函数,因为您应该:

  

网址 model.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';
}