【问题标题】:Backbone.js - delete bad request 400 (bad request)Backbone.js - 删除错误请求 400(错误请求)
【发布时间】:2015-08-27 02:18:43
【问题描述】:

我在我的应用程序中使用 rails 4 和主干。我使用 Backbone 创建了删除方法,但是当我尝试使用它进行删除时,我收到了这个错误:

DELETE http://localhost:3000/[object%20Object] 400 (Bad Request)

我的删除方法:

  deleteBook: (ev) ->
    @model.destroy()
)

事件:

  events:
    "click .delete": "deleteBook"

按下那个错误,它显示模型类型是text/html。所以我想我必须将它转换为json?

如果我这样做:

  deleteBook: (ev) ->
    @model.toJSON().destroy()
)

更新:

我在 rails 控制器中的销毁方法(如果重要的话):

@book = Book.find(params[:id])
@book.destroy

redirect_to '/'

更新2:

我的骨干模型:

  $(document).ready ->
    window.Book = Backbone.Model.extend(url: ->
      (if @id then "/books/" + @id else "/books")
       urlRoot: '/books/'
    )

然后什么都没有发生,我不会得到任何错误。所以我认为我在这里做错了什么?

【问题讨论】:

  • 我认为您的问题不在于 Backbone,而在于您的服务器。当您在模型中使用destroy时,它会启动一个ajax请求以将其永久删除。
  • @Puigcerber 如果它在服务器中,我该如何修复它?如果对这个问题很重要,我用我的 rails destroy 方法更新了我的问题。
  • 您在模型中设置的 URL 必须与您在 Rails 中使用的相同。例如,如果您的图书模型中有 urlRoot: '/books/',则需要 localhost:3000/books/[id] 指向您的 Ruby 方法。
  • @Puigcerber 如果我使用 rails 方法,它会毫无问题地破坏。我怎么能指向那个方向?我还添加了urlRoot: '/books/',而不是初始化url,所以现在它给出了这个错误:Uncaught TypeError: string is not a function
  • @Puigcerber 谢谢,这个可行。

标签: ruby-on-rails backbone.js coffeescript bad-request http-delete


【解决方案1】:

为什么在 url 中定位 [object%20Object]?

在这个地方检查@id的值:

(if @id then "/books/" + @id else "/books")

值应该是一个数字,但我认为你在@id 中有一个对象

【讨论】:

  • 不,我有电话号码。似乎有什么问题是 urlRoot 在骨干模型内的 url 函数内。我把它移开,它开始破坏。
  • 我不太懂这个语法,但是在 Backbone for JS 的 url 函数看起来像这样:windows.Book = Backbone.Model.extend({ url: function () { return (this.id) ? '/books/' + this.id : '/books' } });
  • 是一样的。我正在使用咖啡脚本,这就是为什么我不需要所有这些括号等。
  • 你能输入控制台@id吗?
【解决方案2】:

在 cmets 中讨论后,我将其发布为答案,以便您接受它以关闭问题。

如果您在集合之外使用 Backbone 模型,则必须明确定义 URL。您也可以定义 id 属性。

$(document).ready ->
  window.Book = Backbone.Model.extend(
    urlRoot: '/books/'
    idAttribute: 'id'
  )

当您在该模型中调用 destroy() 时,Backbone 将启动一个 ajax 请求以使用 HTTP 请求 DELETE http://localhost:3000/books/:id 永久删除模型。

因此,您需要在 link 之后将该 URL 映射到您的 Ruby 控制器。

干杯。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多