Backbone尝试在保存后更新服务器中的模型

时间:2014-08-14 11:08:44

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

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

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

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

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

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

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

然后,在服务器返回带有修改属性的json之后,backbone调用此url:

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

没有票证ID!

当服务器返回具有不同属性的模型时,有没有办法防止主干激活更新

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

现在,错误是url是一个函数,我只是覆盖了它!

我将代码更改为:

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

现在可行。

答案 1 :(得分:-1)

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

确保您真正为服务器保存(带有ID的新模型)数据而不是服务器的UPDATING(具有ID的模型)。