Shuffle仅在Backbone Collection中获取项目

时间:2013-10-30 19:01:43

标签: backbone.js

The Backbone.Collection object个代理Underscore's Collection.shuffle()所以所有Backbone集合都有方法shuffle()

Underscore的shuffle工作正常: -

如果我只想对下划线集合中的最后5个项目进行随机播放,可以使用slice()来完成:

-

您还可以对Backbone Collection进行切片和随机播放:

-

但是对于一个fetch来自数据库的多次fetch项目的Backbone Collection,我似乎无法仅对最后一次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的末尾只对{{1}}项进行排序?

2 个答案:

答案 0 :(得分:0)

您可以使用parse函数来重新缓冲来自服务器的返回数据:

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

myCollection.fetch();

答案 1 :(得分:0)

您可以使用随机比较器在项目添加到集合时随机播放。

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

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