Javascript model.destroy()的问题

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?我

每当我使用主干执行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?

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

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
的字符串会给出你看到的结果

解决方案是使用一个函数,正如您所希望的那样:

url
model.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”分支的原样;