是否可以在 Backbone.js 中延迟获取集合中的模型,同时有时获取(和发布)整个集合
Is it possible to lazily fetch models in a Collection in Backbone.js, while sometimes fetching (and releasing) the whole collection?
这是我的场景:
我正在使用骨干.js。
我有几个大型数据集合,我宁愿不要一直保存在内存中。 因此,涉及始终将我所有集合中的所有模型保存在内存中的解决方案并不好。
我需要能够显示和/或编辑这些集合中的任意记录,并且我需要同一模型的多个视图指向同一记录(以便它们保持同步)。 因此,最好从主集合中提取这些模型,而不是执行 Model.fetches。
现在,看起来我可以使用 Collection.fetch 根据需要拉取这些记录,方法是将 ajax 数据设置与 {add: true} 选项结合使用。 如果它能完成工作,这将使我达到我想要的一半。
麻烦的是,在任何给定的时间点,我可能需要为其中一个集合拉出一个选取器列表视图,并临时显示该特定集合的所有记录(或者,如果它真的很大,则显示分页列表)。 当我需要展示所有集合时,我可以获取整个集合(或集合的一页) - 太好了。 但是,当我完成该选取器视图时,我需要清除这些额外的记录。 如何清理它们,同时又不丢失我之前获取的个人记录模型的跟踪?
到目前为止,我梦寐以求的最佳解决方案是保留我的临时记录数组,并在调用 reset 清理它时将其传递给集合。 这还需要我对这些模型保留某种参考计数,以便我知道何时将它们从集合中删除。 对我来说,这似乎是很多簿记。 有没有更清洁的方法来解决这个问题?
看完你的最后一条评论后,我想我理解你。所以,试图重写你的问题,你所拥有的是:
- 模型实例化并分配给局部变量
- 集合包含已分配给局部变量的模型以及其他模型
但是,局部变量和集合中的相同模型是不同的实例,因此一个引用中的更改不会影响另一个引用。这就是您要解决的问题。
因此,我们必须尝试的是局部变量和集合中的引用是相同的引用。
一种方法是,initialize()
中的集合可以检查其所有模型,并将最近获取的模型替换为已实例化的模型(如果id
匹配,并且如果尚不存在)。
为此,我们有一些如何要求已缓存模型的列表。但是这个已经缓存的模型都是在一个局部变量中到不同的视图或其他什么,所以我们需要一个独特的地方,我们可以一次获得完整的列表。这个独特的地方可以是一个名为 CachedModels
的集合。
在Model.initialize()
中,我们可以添加一行,将当前模型添加到此CachedModels
。此外,我们必须注意维护此CachedModels
集合清理或删除模型。
这不是一个非常优化,也不是很容易的方法,但我希望它能以任何方式激励你。
- 如何使用backbone.js从集合中获取模型名称
- 主干-从模板中迭代的集合中获取特定的模型
- 获取Href的集合
- 尝试从集合中获取特定模型
- Backbone集合:如何从API中获取特定对象以放置在模型中
- 如何获取jQuery集合中的第k个元素..作为JQUERY元素
- 所需响应的主干无限集合获取调用
- Backbonejs最简单的集合获取
- 主干.js:仅添加来自 JSON 集合获取的新模型
- 我无法使用 lodash _.template 从一个主干视图中的多个集合获取数据
- Backbone.js集合获取'这个_byId'未定义
- 使用特定的ajax调用设置集合获取
- 在 Backbone 中使用相同类型的集合获取不同的模型集
- 使用主干集合获取数据子集
- 主干集合获取选项不影响GET请求
- 从backbone.js集合获取model.id使用Tastypie创建成功调用
- Onchange集合获取错误而不是函数
- 主干集合获取抛出id错误
- 从mongodb集合获取所有文档时出错
- 从服务器上的Meteor集合获取项目会抛出“;可以't wait without Fiber”;