如何使用backbone.js保存集合

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

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

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

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

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

谢谢!

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

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

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

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

我最终将一个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); } }); 

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