我很清楚这是可以做到的,并且我已经研究了很多地方(包括:保存整个收藏集的最佳实践?)。但是我仍然不清楚它到底是用代码编写的吗?(该帖子以英语进行了解释。最好有一个javascript特定的解释:)
假设我有一个模型集合- 模型本身可能具有嵌套集合。我已经重写了父集合的toJSON()方法,并且得到了一个有效的JSON对象。我希望“保存”整个集合(对应的JSON),但是主干似乎并没有内置该功能。
var MyCollection = Backbone.Collection.extend({ model:MyModel, //something to save? save: function() { //what to write here? } });
我知道你必须在某个地方说:
Backbone.sync = function(method, model, options){ /* * What goes in here?? If at all anything needs to be done? * Where to declare this in the program? And how is it called? */ }
一旦“视图”完成处理,它便负责告诉集合将自身“保存”在服务器上(能够处理批量更新/创建请求)。
出现的问题:
如果确实是一项棘手的工作,那么我们可以在视图中调用jQuery.ajax并通过this.successMethod或this.errorMethod作为成功/错误回调吗?能行吗
this.successMethod
this.errorMethod
我需要与主干的思维方式保持同步-我知道我肯定缺少某些东西,可以同步整个收藏。
我立即想到的是不覆盖Backbone.Collection上save方法的方法,而是将集合包装在另一个Backbone.Model中并在其上覆盖toJSON方法。然后,Backbone.js会将模型视为单一资源,而您不必破解Backone认为过多的方式。
请注意,Backbone.Collection具有toJSON方法,因此您的大部分工作都已为您完成。您只需将包装器Backbone.Model的toJSON方法代理到Backbone.collection。
var MyCollectionWrapper = Backbone.Model.extend({ url: "/bulkupload", //something to save? toJSON: function() { return this.model.toJSON(); // where model is the collection class YOU defined above } });