“如何”在Backbone.js中保存整个集合
我很清楚它可以完成,我已经看过不少地方(包括:保存整个集合的最佳实践?)。 但是我仍然不清楚“代码中究竟是怎么写的”? (这篇文章用英文解释它,这将是一个非常棒的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
作为成功/错误回调函数传递? 它会起作用吗?
我需要与骨干的思维方式保持同步 - 我知道我绝对错过了一些东西,同步整个集合。
我的直接想法不是重写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
}
});
一个非常简单的...
Backbone.Collection.prototype.save = function (options) {
Backbone.sync("create", this, options);
};
...会为您的收藏保存一种方法。 请记住,这将始终将所有集合的模型发布到服务器,无论发生了什么变化。 选项只是普通的jQuery ajax选项。
我最终只是有一个'保存'像方法,并在其中调用$ .ajax。 它给了我更多的控制权,而不需要像@brandgonesurfing建议的那样添加一个包装类(尽管我绝对喜欢这个想法:)如前所述,因为我已经有了collection.toJSON()方法覆盖了我所做的所有使用它在ajax调用中...
希望这可以帮助那些绊倒它的人......
链接地址: http://www.djcxy.com/p/67125.html