我有一个我想要销毁的骨干模型,但是没有与请求一起发送参数,因此服务器返回“删除404未找到”错误。
我承认我的结构有点奇怪,因为我根据它们是否已经在列表中创建/销毁这些项目。
var list_item = new MyApp.Models.ListItem({item_id: this.model.id, group_id: this.model.group_id}); if($(e.currentTarget).hasClass('add')){ list_item.save(list_item, { success: function(response){ this.model.attributes.addedtolist_id = response.id console.log(this.model); }, error: function(){ alert('could not save item'); } }); } else if($(e.currentTarget).hasClass('remove')) { list_item.id=this.model.addedtolist_id; list_item.attributes.id = this.model.addedtolist_id; console.log(list_item); list_item.destroy({ success: function(){ alert('delete'); }, error: function(){ alert('could not uncheck'); } }); }
在销毁之前list_item
的控制台输出
_escapedAttributes: Object _previousAttributes: Object _setting: false attributes: Object id: 2 item_id: 66 group_id: 64 __proto__: Object cid: "c23" id: 2 __proto__: q
但是当我查看使用删除请求发送的标头时,我没有发送任何参数。
-----------------------更新params被发送,404仍然被返回-------------- < / p>
根据Yaroslav的建议,我在destroy方法中添加了一个'header',但我的rails控制器仍然返回DELETE 404 not found
错误。我只是想回到listitem,以确保在我销毁之前我得到了正确的一个。
我的控制器是
def destroy listitem = Listitem.find(params[:id]) return render :json => listitem end
答案 0 :(得分:29)
我猜你在模型中将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'
答案 1 :(得分:2)
你期望发送什么样的短信?默认情况下,Destroy仅通过url生成一个http删除请求,没有正文或任何其他标题。 params参数适用于jquery ajax函数,因此您可以在那里指定标题:
model.destroy({
...
headers : {
your_header : 123
}
})
答案 2 :(得分:0)
list_item.destroy( **l** {
success: function(){
alert('delete');
}, ... );
问题是额外的第一个吗?