【问题标题】:Backbone - receiving DELETE data in the back endBackbone - 在后端接收 DELETE 数据
【发布时间】:2015-03-13 08:18:14
【问题描述】:

假设您有一个带有id 的模型,并且您想在数据库中删除它。因此,您在该模型上调用 destroy() 方法(如下面的代码示例中所示)。这会发送一个OPTIONS HTTP 请求,然后是一个DELETE HTTP 请求。我的问题是,虽然我在服务器端很好地捕获了 DELETE 请求,但我找不到任何信息告诉我模型 id 是什么 - 它不是请求中的参数,也不是 URL .我如何找到这些信息?我在文档here 中看不到它。这是我存储代码的仓库的link

  removeElement: function() {
    // DELETE in DB
    this.model.destroy();
    this.remove();
    this.unbind();
  },

我希望 HTTP 请求有一个类似 { 'id': 42319 } 或类似的参数。

【问题讨论】:

  • 应该在网址里吧。 blabla/resource/id 应该是要删除的资源。
  • 这是正在生成的地址:http://localhost:8080/todos/api/v0.1.0/。模型的id 是否未设置?
  • 您可以查看网络面板以查看是否设置了 id。 url 应该在 api 的版本号之后有资源,然后是资源 id。但这一切都取决于您如何设置后端。

标签: javascript backbone.js webapp2


【解决方案1】:

您可能需要设置模型 ID 属性。 Backbone 在客户端自动设置的 id 是 cid 而不是 id。请注意,使用不同唯一键(如 MongoDB)的 DB 的常见问题不是从该键映射到 ID as described in the docs

例如:

var Model = Backbone.Model.extend({
    idAttribute: "_id"
    //other model setup code
});

【讨论】:

  • 当我将attribute: 'id', 添加到模型中(如您的示例中)时,它会停止向服务器发送 HTTP 请求 - 因此,某处发生了崩溃。有什么想法吗?
  • 假设您已经设置了 urlRoot,并且在您的服务器上正确设置了必要的路由 - 这可能是因为您在创建模型时没有创建 ID。这个example app 可能会对您有所帮助。一定要看wineDetails函数
  • 明天再看。如果它解决了我的问题,我会将您的答案标记为正确。谢谢=)
【解决方案2】:

我的问题是我在modelcollection 中都定义了url 属性。您应该只在collection 中定义url。愚蠢的错误。

【讨论】:

    猜你喜欢
    • 2020-10-14
    • 2015-09-10
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多