1

Backbone.Collection 对象代理了UnderscoreCollection.shuffle(),因此所有 Backbone 集合都有方法shuffle()

下划线的洗牌工作正常: -

如果我只想打乱下划线集合中的最后 5 个项目,可以通过以下方式完成slice()

-

您还可以对 Backbone 集合进行切片和洗牌:

-

fetch但是对于从数据库中多次获取项目的主干集合,我似乎不能只对上次fetch调用获取的项目进行洗牌,因为集合中的项目似乎是按它们被获取的顺序排序的,即使在之后一个切片洗牌。

a.models  // say, [id:1, id:2, id:3]
a.fetch().done(function (data) {
    return data = _.shuffle(data)
})
a.models  // [id:1, id:2, id:3, id:4, id:5, id:6], still sorted

似乎在延迟对象内部进行排序不会以任何方式改变外部集合。

那么,我怎样才能只n对 Backbone Collection 末尾的项目进行排序呢?

4

2 回答 2

0

您可以使用随机比较器在将项目添加到集合时对其进行洗牌。

comparator: function(a) {
  var rand = _.random(0, 1000);
  a.set({rand: rand});
  return rand;
}

小提琴:http: //jsfiddle.net/pYyRp/

于 2013-10-30T20:58:57.630 回答
0

您可以使用 parse 函数来打乱从服务器返回的数据:

MyCollection.prototype.parse = function(resp){
  return _.shuffle(resp);
};

myCollection.fetch();
于 2013-10-30T20:49:09.780 回答