11

我有一个要销毁的主干模型,但没有随请求发送参数,因此服务器返回“未找到删除 404”错误。

我承认我的结构有点奇怪,因为我根据它们是否已经在列表中来创建/销毁这些项目。

var list_item = new MyApp.Models.ListItem({item_id: this.model.id, group_id: this.model.group_id});

    if($(e.currentTarget).hasClass('add')){

            列表项。保存(列表项,{
                成功:函数(响应){
                     this.model.attributes. addedtolist_id = response.id
                     控制台.log(this.model);
                },
                错误:函数(){
                     alert('无法保存项目');
                }
           });
    } else if($(e.currentTarget).hasClass('remove')) {
         list_item.id=this.model.addedtolist_id;
         list_item.attributes.id = this.model.addedtolist_id;
         控制台.log(list_item);
         list_item.destroy({
             成功:函数(){
                警报(“删除”);
             },
             错误:函数(){
               alert('不能取消选中');
            }
   });
}

list_item销毁前的控制台输出是

_escapedAttributes:对象
_previousAttributes: 对象
_设置:假
属性:对象
 编号:2
 item_id: 66
 group_id:64
__proto__: 对象
cid:“c23”
编号:2
__proto__: q

但是当我查看与删除请求一起发送的标头时,我没有发送任何参数。

------------更新参数正在发送,404仍在返回--------------

根据 Yaroslav 的建议,我在 destroy 方法中添加了一个“标题”,但我的 rails 控制器仍然返回DELETE 404 not found错误。我只是想退回列表项,以确保在销毁它之前得到正确的列表项。

我的控制器是

定义破坏
   listitem = Listitem.find(params[:id])
   返回渲染:json => listitem
 结尾
4

3 回答 3

30

我猜你正在将url模型中的设置为字符串:

Backbone.Model.extend({
    url: '/list_items',
    //...
});

这将告诉 Backbone 完全/list_items用作所有操作的 URL。你应该使用一个函数:

url: function() { return '/list_items/' + encodeURIComponent(this.id) }

或使用字符串urlRoot并让默认url函数添加id

urlRoot: '/list_items'
于 2012-06-16T03:21:02.447 回答
2

您希望发送哪些参数?默认情况下,Destroy 仅通过 url 发出 http 删除请求,没有正文或任何其他标头。params 参数被传递给 jquery ajax 函数,因此您可以在那里指定标题:

model.destroy({
...
    headers : {
        your_header : 123
    }
})
于 2012-06-15T06:47:54.413 回答
0
list_item.destroy( **l** {
  success: function(){
  alert('delete');
}, ... );

额外的第一是问题吗?

于 2012-06-15T05:05:17.850 回答