我创建了一组用户,然后添加了用户,但是当我打印用户时,他们没有排序。
我尝试使用.add
和.create
并设置了comparator
,因此我认为它会自动排序。
我缺少什么?
我想至少按排序顺序遍历用户。
我的代码带有一些评论
http://plnkr.co/edit/kMRdPfsjWDEIdHc22Ay0?p=preview
// A user
var User = Backbone.Model.extend({
sync: function(){} // prevent send
});
// a collection
var Friends = Backbone.Collection.extend({
comparator: 'lname',
model: User
});
// instance
var friends = new Friends();
// loop through and add new users
for(var i=0; i<10; i++){
friends.create({
fname: createName(),
lname: createName()
});
// tried with add, still not sorted
// friends.add(new User({
// fname: createName(),
// lname: createName()
// }));
}
// print what we have so far
console.log( friends.toJSON(), friends );
// when page is ready append to a table
$(document).ready(function(){
var i = 0;
friends.each(function( model ){
i++;
$('.friends tbody').append("<tr><td>" + i + "</td><td>" + model.get('lname') + "</td><td>" + model.get('fname') + "</td></tr>");
});
})
;
// funtion to create random names
function createName()
{
var text = "";
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
for( var i=0; i < 5; i++ ){
text += possible.charAt(Math.floor(Math.random() * possible.length));
}
return text;
}
答案 0 :(得分:1)
在你的情况下,比较器通过使用词法比较进行排序。这意味着b在A之后出现,因为它首先检查大写字符优先级。你需要的是这样的自定义比较器函数,它不区分大小写:
var Friends = Backbone.Collection.extend({
// comparator: 'lname',
comparator: function(a,b){
a = a.get('lname').toLowerCase();
b = b.get('lname').toLowerCase();
if (a < b) { return -1; }
if (a > b) { return 1; }
else { return 0; }
},
model: User
});
这里是带有自定义比较器功能的分叉Plunkr的链接。