如何使用backbone.js保存集合

Nic*_*ang 7 model-view-controller jquery backbone.js

我有一个类别的层次结构.我使用jquery库来构建层次结构,以便按照用户想要的方式混淆.然后他们点击保存.因此,要保存的初始层次结构和层次结构可能完全不同.

层次结构表示为集合,我使用parentIds使用ol和li标记构建树.

当用户单击"保存"时,我需要使用新的parentId更新集合中的所有项目,并将每个项目与服务器同步.

我想知道是否有人对如何继续这里有任何建议.我在Backbone.sync的文档中看到,'' setTimeout用于批量快速更新到单个请求.''所以,如果我理解正确,我会将每个调用排队到Backbone.sync然后使用setTimeout几秒后将我的队列发送到服务器?

另外,如果我重写Backbone.sync,我是否仍然需要一个'save'方法,用于解析响应的json的集合(服务器响应必须发回一个对象列表),然后调用模型.set集合中的每个项目?有人有任何示例代码吗?

谢谢!

Nic*_*ang 21

我最终将一个updateAll方法放入我的集合模型中.这就像一个梦想:

Domain.PageList = Backbone.Collection.extend({  
  model: Domain.Page,   
  url: '_domainController/PageListController',
  comparator: function(page) {
    return page.get('ordering');
  },

  updateAll: function() {
    var collection = this;
    options = {
      success: function(model, resp, xhr) {
        collection.reset(model);
      }
    };
    return Backbone.sync('update', this, options);
  }
});
Run Code Online (Sandbox Code Playgroud)

在后端(我正在使用PHP)我只是获取数据并将其保存到我的数据库并返回JSON格式的新集合.


dir*_*ira 6

我不确定我完全理解上下文.它是这样的:你有一个包含所有类别的集合,并使用属性保持层次结构parentId.用户更改层次结构,然后您想要保存层次结构(隐式地,保存现在包含不同的集合parentId).

如果这是正确的,我会做的是:

  • 制作接受散列的PUT/categories操作,{id: parentId}并使用此数据更新所有类别.
  • 保存时,我会打电话Backbone.sync('update', categories_collection, {data: a_hash_of_{id:parent_id}, success: your_success_callback).如果您url为类别指定,这应该在没有任何其他覆盖的情况下工作,并且在成功回调中,您可以使用新数据重置集合.

这不是完整的REST,但它的优点是无论您拥有多少类别,都只会触发一个更新请求.