【问题标题】:where to get the record id when calling backbone.js destroy调用backbone.js破坏时在哪里获取记录ID
【发布时间】:2012-01-14 03:58:44
【问题描述】:

我有一些测试代码,我只是想用它来找出backbone.js。当我在模型对象主干上调用 destroy 时,会向我的休息服务发出 DELETE 请求。但是,我在请求数据、查询字符串、正文或任何地方都看不到任何表明正在删除哪条记录的 ID。

我的模型有一个 id 属性,我给它分配了一个值 1。我还需要做些什么来确保 id 可以通过服务器传递吗?还是有其他方法可以让我检测到正在删除的记录?

编辑 - 以下是相关代码:

var AccountModel = Backbone.Model.extend({
    url: 'Account/Update',
    id: null,
    username: ''
});

var accountM = new AccountModel({id: 1, username: 'test'});

accountM.destroy();

当我查看调试器时,我看到发出了 AJAX 请求,它看起来像这样:

Request URL:http://localhost/probli/Account/Update
Request Method:DELETE
Status Code:200 OK

似乎没有 ID 或任何东西,也没有发布数据。我做错什么了吗?谢谢。

【问题讨论】:

  • 你能分享你的测试代码吗?
  • 我刚刚编辑了帖子以添加代码。感谢收看!

标签: backbone.js destroy


【解决方案1】:

您应该设置模型的urlRoot 属性,然后让Backbone 处理构造DELETE url:

var AccountModel = Backbone.Model.extend({
    urlRoot: 'Account/Update',
    id: null,
    username: ''
});

这将在调用accountM.destroy() 时引发以下请求:

Request URL:http://localhost/probli/Account/Update/1
Request Method:DELETE
Status Code:200 OK

【讨论】:

  • null id怎么变成1?
  • @lulalala 使用此行创建新实例时new AccountModel({id: 1, username: 'test'});
  • 我还要补充一点,您只有需要 urlRoot。如果你同时拥有 url 和 urlRoot,你可能会遇到这个问题,去掉 url 应该可以清除它。
【解决方案2】:

Backbone.sync 会将销毁作为一个简单的请求发回,该请求带有 url 中的 ID。例如:

DELETE http://example.com/foos/1

这是对 ID 为 1Foo 的 HTTP 删除。

在诸如 Rails、ASP.NET MVC 甚至 Sinatra 和其他简单服务器之类的 MVC Web 服务器中,这将是一个传入服务器的参数。

例如,在 Sinatra 中:


delete "/foos/:id" do

  id = params[:id] # the id from the url/route

  foo = Foos.find(id) # get the foo
  foo.destroy
  return {}.to_json
end

如您所见,我在路由中定义了一个参数,称为:id,我的代码能够通过params 数据访问它。然后我找到了有问题的Foo,将其销毁,并返回了一个空的 JSON 结果——这是 Backbone 所需要的,即使在销毁期间也是如此。

希望对您有所帮助。

【讨论】:

  • 感谢您的回复。您指定将 id 添加到 url 的位置的主干 javascript 中是否有某处?我刚刚发布了一些示例代码并查看了调试器,我可以看到正在发出的请求,但没有 id。谢谢。
  • 对此的任何更新。我有同样的问题。已发送 DELETE 请求,但未在 URL 中发送 id。我已经检查了该模型确实存在于集合中,并且具有有效的 id
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 2018-01-09
  • 2018-01-20
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
相关资源
最近更新 更多