我目前正在研究骨干应用程序,我想根据各种属性订购我的收藏,我根据成本,持续时间,开始和结束日期(时间戳)进行排序工作,但我正在努力排序基于name属性的集合,这是我的集合代码,
var ProjectCollection = Backbone.Collection.extend({
url: '/projects',
model: app.Project,
sort_key: "finish_date",
sort_order: 1,
parent_filter: false,
initialize: function() {
var pm = this.get('projectmanager');
this.set("project_manager", new app.User(pm));
var sp = this.get('salesperson');
this.set("sales_person", new app.User(sp));
},
comparator: function (item1, item2) {
return (item1.get(this.sort_key) - item2.get(this.sort_key)) * this.sort_order;
},
sortByField: function(fieldName, orderType) {
this.sort_key = fieldName;
this.sort_order = orderType == "desc" ? -1 : 1;
console.log(this.sort_order);
this.sort();
},
});
是否有方法按字母顺序排序字符串?
我添加了新的比较器功能,这是我通过名称以升序方式订购时得到的输出,
Android应用程序
Hello World我是项目的新实例
Java应用程序
西蒙的项目
一些新项目
Symfony App,
Windows应用程序
iPhone应用程序
正如您所见,iPhone应用程序不应该在列表的最后。
答案 0 :(得分:2)
我更改了你的comprator函数以支持字符串和数字 comprator函数中的问题是它减去产生NaN的字符串 我把它改成了
comparator: function (item1, item2) {
var sortValue = (item1.get(this.sort_key) > item2.get(this.sort_key)) ? 1 : -1;
return sortValue * this.sort_order;
},
这只是比较,获得值为1的> b然后像你那样改变它的desc排序
检查此jsFiddle
编辑: 为了支持不区分大小写的排序,应该修改比较器函数以单独处理字符串
comparator: function (item1, item2) {
var val1 = item1.get(this.sort_key);
var val2 = item2.get(this.sort_key);
if (typeof (val1) === "string") {
val1 = val1.toLowerCase();
val2 = val2.toString().toLowerCase();
}
var sortValue = val1 > val2 ? 1 : -1;
return sortValue * this.sort_order;
}