我在我的应用程序中使用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!
当服务器返回具有不同属性的模型时,有没有办法防止主干激活更新?
答案 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的模型)。