我使用 Backbone.js 并且有一组模型。该集合被检索并显示在前端。在前端,我希望用户删除新模型并将其添加到集合中。
当用户完成并单击“保存”时,我希望更新整个集合。这意味着当单击“保存”时,集合会同步(以某种方式)。添加的模型将被保存,删除的模型将被删除。
如果我通过删除和添加模型来操作集合,然后使用 ex:
this.collection.sync()
会删除和添加模型吗?
至少有两种方法可以实现这一目标。
创建 API 端点来管理模型
添加/更新模型时,直接保存模型.save http://backbonejs.org/#Model-save当模型被删除时,调用.destroy http://backbonejs.org/#Model-destroy on it.
该系列还有一个.create功能 http://backbonejs.org/#Collection-create它将新模型添加到其中并同时保存。
最好的事情是在一个请求中完成所有事情。
不总是。集合可能很大,而变化却很小,因此每次与服务器交换 100 个对象,而不是 X 个小的请求来添加、删除或更新列表中的模型。
Pros
-
可重用端点管理单个模型
-
光数据传输,比发送整个集合更快(仅通过部分更新发送更改)
- 可能的自定义行为对于每个动作
- Easy 实时更新执行
Cons
- 进行大量更改时会提出更多请求
- 需要模型有 id
- 要管理的其他端点
- 不适用于批量操作(一次保存所有模型)
把集合的models
数组到模型中
收藏品并不是用来保存的。相反,将models
将集合转换为与 API 端点通信的模型。该端点应该期望一个带有数组字段的对象,它可以用来替换服务器端的集合。
var CollectionModel = Backbone.Model.extend({
urlRoot: "collection/endpoint/"
});
var myModel = new CollectionModel();
// ...sometime later...
myModel.save({
arrayAttribute: yourCollection.toJSON()
}, { patch: true });
Pros
-
一个端点;始终对 API 进行相同的调用
-
易于实施;仅在发生保存的一个地方
Cons
- 无论变化如何,所有模型都会根据每个请求进行传输
- 如果集合很大,可能会很慢
收藏品.sync功能 https://github.com/jashkenas/backbone/blob/8ec88604732944f197b352a6be22c8216ea9d3a1/backbone.js#L796-L799只是一个代理Backbone.sync http://backbonejs.org/#Sync如果没有正确的参数,什么也不做。它仅在内部使用.fetch
(1055号线 https://github.com/jashkenas/backbone/blob/8ec88604732944f197b352a6be22c8216ea9d3a1/backbone.js#L1055)并且不意味着直接使用,除非添加自定义行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)