我一直在寻找答案而没有运气。 基本上我正在复习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,它是否被隐式调用?
答案 0 :(得分:2)
默认情况下,集合没有比较器。如果你定义一个 比较器,它将用于维护已排序的集合 订购。这意味着在添加模型时,会将它们插入到 collection.models中的正确索引。
因此,每次调用people.add(...)
时,集合都会使用您使用people.comparator = function(a, b) { ... }
设置的比较器将模型插入到有序位置。