Javascript model.destroy()的问题
每当我使用主干执行model.destroy()时,它都会尝试对以下URL执行删除请求:Javascript model.destroy()的问题,javascript,backbone.js,Javascript,Backbone.js,每当我使用主干执行model.destroy()时,它都会尝试对以下URL执行删除请求: http://localhost:8000/api/v1/item/?format=json 由于我正在对一个模型进行销毁,我希望应该传递该模型的ID,因此对其执行删除请求的URL如下: http://localhost:8000/api/v1/item/8/?format=json 其中指定了ID。由于缺少ID,加上我使用了tastypie,所有项目都被删除了。如何使URL包含我要删除的项目的ID?我
http://localhost:8000/api/v1/item/?format=json
由于我正在对一个模型进行销毁,我希望应该传递该模型的ID,因此对其执行删除请求的URL如下:
http://localhost:8000/api/v1/item/8/?format=json
其中指定了ID。由于缺少ID,加上我使用了tastypie,所有项目都被删除了。如何使URL包含我要删除的项目的ID?我猜您的模型看起来像这样:
var M = Backbone.Model.extend({
url: '/api/v1/item/?format=json',
// ...
});
url: function() {
if(this.isNew())
return '/api/v1/item/?format=json';
return '/api/v1/item/' + encodeURIComponent(this.id) + '/?format=json';
}
模型的url
应该是一个函数,但由于它是一个内部函数,字符串也会“起作用”;如果你检查我链接到的源代码,你就会明白为什么url
的字符串会给出你看到的结果
解决方案是使用一个函数,正如您所希望的那样:
urlmodel.url()
返回服务器上模型资源所在的相对URL。如果您的模型位于其他位置,请使用正确的逻辑覆盖此方法。生成以下格式的url:“/[collection.url]/[id]”
,如果模型不是集合的一部分,则返回到“/[urlRoot]/id”
你可能会想要这样的东西:
var M = Backbone.Model.extend({
url: '/api/v1/item/?format=json',
// ...
});
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';
}
是否覆盖模型上的
url
方法?encodeURLComponent返回一个如下所示的url。我怎样才能得到身份证?@egidra:那没有意义,你的ID
s是什么样子的?它们是像“/api/v1/item/29/”这样的数字还是字符串?对不起,它们看起来像您刚才键入的:“/api/v1/item/29/”。当URL返回时,它看起来像“localhost:8000/api/v1/item//api/v1/item/29//?format=json”。我的ID看起来像“/api/v1/item/29/”。@egidra:你的ID看起来很有趣,你可能想把它改成数字。同时,return this.id+'?format=json'
应该可以工作,您可能希望保持“is new”分支的原样;