【问题标题】:Backbone try to update model in server after save骨干网在保存后尝试更新服务器中的模型
【发布时间】:2014-10-08 00:25:10
【问题描述】:

我在我的应用程序中使用 Rails 4 + 主干。

一切都很好。新模型在主干中创建并通过调用保存:

newItem.save(null, {success: this.sendSuccess, error: this.sendError});

但是,要实现一项新功能,我需要更改其中一个模型属性。我看到在调用 sendSuccess 之前触发了 PUT 操作,我想避免这种情况。

而且,网址很奇怪。保存操作调用此 url:

Remote Address:127.0.0.1:3000
Request URL:http://www.lvh.me:3000/api/user/1/tickets
Request Method:POST

然后,在服务器返回带有修改属性的 json 后,主干调用这个 url:

Remote Address:127.0.0.1:3000
Request URL:http://www.lvh.me:3000/api/user/1/tickets
Request Method:PUT

没有票号!

当服务器返回具有不同属性的模型时,有什么方法可以防止主干触发更新

【问题讨论】:

  • 您的代码是否有可能调用 model.save 以响应 "change" 事件?
  • 是的,这就是问题所在,谢谢!!!

标签: backbone.js ruby-on-rails-4


【解决方案1】:

问题是我的模型中有一个监听器,恰好在服务器更改的列上:

initialize: function() {
  this.on("change:status", this.statusChanged, this);
},

现在我必须弄清楚为什么更新 url 不包含模型 ID。

我发现当我第一次创建模型时,由于某些原因我无法将它分配给集合,所以为了保存它我手动分配了 url:

var newTicket = new MyApp.Ticket( ticketData );
newTicket.url = this.collection.url();

现在,错误在于 url 是一个函数,我只是重写了它!

我把代码改成:

newTicket.urlRoot = this.collection.url();

现在它可以工作了。

【讨论】:

    【解决方案2】:

    如果您的模型设置了 id 属性,Backbone 将始终执行 PUT。使用 RESTfull 时这很有意义。

    确保您确实是在将数据保存(没有 ID 的新模型)到服务器,而不是更新(有 ID 的模型)到服务器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-23
      • 2012-04-24
      • 2013-02-17
      • 2012-07-31
      相关资源
      最近更新 更多