“如何”在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.successMethodthis.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

    上一篇: "How" to save an entire collection in Backbone.js

    下一篇: Polymorphism Without Indirect Jumps?