在不更改订单的情况下合并Backbone集合

时间:2013-03-11 22:27:54

标签: backbone.js backbone-collections

我有一个代表N张照片的骨干系列。最初我收藏的那些N中的照片很少(比如X)。

我的收藏然后从服务中提取所有N张照片。我可以用这些N重置我的集合,但问题是,现有的X有一些额外的元数据,我不想丢失它。所以我想在现有的收藏中合并这N张照片。我该怎么做?

我尝试使用collection.add(N张照片),但它的作用是保持X照片不变,然后在最后添加剩余的(N-X)。我希望保留服务返回的N张照片的顺序,并将这些现有照片合并到N张照片中。

1 个答案:

答案 0 :(得分:0)

您应该能够使用该集合的comparator

  

比较器 collection.comparator

     

默认情况下,集合没有比较器。如果定义比较器,它将用于按排序顺序维护集合。这意味着,在添加模型时,会将它们插入collection.models中的正确索引。

所以您需要做的就是在致电comparator之前确保您的收藏集N知道add中的内容顺序。粗略和丑陋的概念证明如下:

// `incoming` is the new data, `c` is the collection.
for(var i = 0, rev = { }; i < incoming.length; ++i)
    rev[incoming[i].id] = i;
c.comparator = function(m) {
    return rev[m.id];
};
c.add(incoming);

可能会将真实版本包含在您的收藏中。

演示:http://jsfiddle.net/ambiguous/dCZbv/