【问题标题】:backbone destroy not sending params主干破坏不发送参数
【发布时间】:2012-06-15 04:37:06
【问题描述】:

我有一个要销毁的主干模型,但没有随请求发送任何参数,因此服务器返回“未找到删除 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 结尾

【问题讨论】:

  • @muistooshort 我已经更新了格式并添加了缺少的大括号。希望那会更好。
  • 它的id 是从哪里得到的?我在new ListItem 中没有看到它。 DELETE 请求的 URL 是什么样的?
  • 它在new ListItem 中没有id,因为那是在创建listitem 的时候,所以它还没有id。这就是我在destroy 之前创建ID 的原因。网址是DELETE http://10.1.1.7:3000/list_items 404 (Not Found)。我对 index 和 create 方法使用相同的 url,这没有问题。
  • 谁建立了那个 URL? ListItem 中有 urlurlRoot 吗?
  • @muistooshort,该 URL 是在我的主干 ListItem 模型中定义的,因此它与 fetchsave 上使用的 URL 相同,可以正常工作。

标签: ruby-on-rails-3 backbone.js destroy


【解决方案1】:

我猜你正在将模型中的 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'

【讨论】:

  • 是的 - 这对我来说是 urlRoot 的东西!
【解决方案2】:

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

model.destroy({
...
    headers : {
        your_header : 123
    }
})

【讨论】:

  • 感谢@Yaroslav,我期待 id 作为参数发送。我已经添加了您的“标题”,它现在将 id 作为参数发送,但我仍然找不到“删除”。
  • 我在服务器端(Rails)看不到这些参数。我找不到太多关于 backboe destroy 的 options 参数的文档。可以加链接吗?谢谢!
  • 不幸的是,文档中没有描述,在源代码中找到。
  • 很遗憾,DELETE 不会自动将模型 ID 与请求一起发送到服务器。将其添加为标题感觉很麻烦。
【解决方案3】:
list_item.destroy( **l** {
  success: function(){
  alert('delete');
}, ... );

那额外的第一是问题吗?

【讨论】:

  • 哎呀,对不起@jakee,当它不起作用时,我尝试了list_item.destroy(list_item,{success...,但不小心把 l 留在了那里。这不是问题,而是尝试修复。
猜你喜欢
  • 1970-01-01
  • 2017-07-06
  • 1970-01-01
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
相关资源
最近更新 更多