集合中的下划线索引

时间:2014-08-16 07:51:34

标签: backbone.js comparator indexof

我一直在寻找答案而没有运气。 基本上我正在复习Addy Osmani Backbone指南,看来我在这里无法通过这段代码。

var people = new Backbone.Collection;

people.comparator = function(a, b) {
    return a.get('name') < b.get('name') ? -1 : 1;
};

var tom = new Backbone.Model({name: 'Tom'});
var rob = new Backbone.Model({name: 'Rob'});
var tim = new Backbone.Model({name: 'Tim'});

people.add(tom);
people.add(rob);
people.add(tim);

console.log(people.indexOf(rob) === 0); // true
console.log(people.indexOf(tim) === 1); // true
console.log(people.indexOf(tom) === 2); // true

我不知道people.comparator如何重新排序集合,即使在任何地方都没有调用,再加上返回1或-1如何重新排序。 或者,一旦创建了Collection或者在Collection本身上调用了indexOf,它是否被隐式调用?

1 个答案:

答案 0 :(得分:2)

来自backbone documentation

  

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

因此,每次调用people.add(...)时,集合都会使用您使用people.comparator = function(a, b) { ... }设置的比较器将模型插入到有序位置。