1

这是我的场景:

我正在使用 Backbone.js。

我有几个大型数据集合,我不想一直保存在内存中。因此,涉及始终将我所有集合中的所有模型保存在内存中的解决方案并不好。

我需要能够显示和/或编辑从这些集合中选择的任意记录,并且我需要同一模型的多个视图来指向同一记录(因此它们将保持同步)。因此,最好从主集合中提取这些模型,而不是 Model.fetches。

现在,通过将 ajax数据设置与{add: true}选项结合使用,我似乎可以根据需要使用 Collection.fetch 来提取这些记录。如果它能完成工作,那将使我达到我想要的一半。

麻烦的是,在任何给定的时间点,我可能需要为这些集合之一拉出一个选择器列表视图,并临时显示该特定集合的所有记录(或者,如果它真的是一个分页列表,大的)。当我需要全部展示它们时,我可以获取整个集合(或集合的一页)——太好了。但是,当我完成了选择器视图时,我需要清除那些额外的记录。我如何擦洗它们,而不会丢失我之前获取的个人记录模型?

到目前为止,我梦想的最佳解决方案是保留一组我的临时记录,并将其传递给集合,当我调用 reset 来清理它时。这还需要我在这些模型上保留某种引用计数,所以我知道何时将它们从集合中删除。对我来说,这似乎是很多簿记工作。有没有更清洁的方法来处理这个?

4

1 回答 1

0

看完你的最后一条评论,我想我理解你了。所以,试图重写你的问题,你所拥有的是:

  • 模型实例化并分配给局部变量
  • 一个集合,其中包含您已经分配给局部变量的模型以及其他模型

但是局部变量集合中的相同模型 是不同的实例,因此一个引用的更改不会影响另一个引用。这就是您要解决的问题。

所以,我们要尝试的是,局部变量中的引用和Collection中的引用必须是同一个引用。

一种方法可以是集合中的initialize()可以检查其所有模型并将最近获取的模型替换为已经实例化的模型,如果id匹配,并且如果不存在。

为此,我们有一些方法需要已经缓存的模型列表。但是这个已经缓存的模型都是一个局部变量到不同的视图或其他任何东西中,所以我们需要一个独特的地方,我们可以在一个镜头中获得完整的列表。这个独特的地方可以是一个名为的集合CachedModels

在 中,Model.initialize()我们可以添加一行,将当前模型添加到 thisCachedModels中。我们还必须注意保持这个CachedModels集合清理或删除模型。

这不是一个非常优化,也不是很容易的方法,但我希望它能以任何方式激励你。

于 2012-06-02T08:29:42.140 回答