每当我使用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?
答案 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';
}