将模型添加到集合中

时间:2012-11-01 14:15:47

标签: javascript backbone.js

我正在寻找一种优雅的方式,在添加模型时将模型添加到集合中。在Backbone源代码中有一个unshift方法可以做到这一点,但是用于将模型添加到集合的add方法太复杂而不能简单地扩展。我正在构建一个依赖于照片和推文的幻灯片,并且应该始终显示最新的,最旧的最后一个。简化我的问题:

初始化app,API调用返回:

apple, banana, lemon

所以,苹果是最新的幻灯片。该系列已经建成:

apple, banana, lemon

间隔后,API调用检查是否有更新的水果,结果:

orange

Collection追加模型:

(apple, banana, lemon), orange

那不是我想要的;橙子是最新的水果,之后是苹果。但是,在这种情况下,我可以在绘制幻灯片时追加和重新反转之前反转我的初始集合。现在,事情变得更加复杂(我添加了括号来澄清):

API调用检查更多成果:

pineapple, kiwi

Collection逐个添加新模型:

((apple, banana, lemon), orange), pineapple, kiwi

所以现在从新到旧,我的收藏看起来像这样:

((not so old, older, oldest), pretty new), brand new, new

这绝对没有意义:))

当然,更改API响应可以让我的生活更轻松,但目前不是一个选择;它也应该不重要,因为响应中的项目顺序是新的 - >我觉得很好。

我找不到开箱即用的解决方案,我不想通过将部分主干源克隆到unshift个新模型来使问题复杂化。建议?谢谢!

1 个答案:

答案 0 :(得分:5)

如果模型有某种与它们相关的日期或时间或者任何其他类型的排序(如果需要,您可以手动添加一个),您可以通过在集合中实现comparator函数对集合进行排序。参见:

http://backbonejs.org/#Collection-comparator