目前,我正在开发主干应用程序,我想根据各种属性对集合进行排序,我正在根据成本,持续时间,开始和结束日期(时间戳)进行排序,但是我正在努力根据以下条件对集合进行排序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应用
你好世界,我是一个新的项目实例
Java应用
西蒙的计划
一些新项目
Symfony App,
Windows应用程序
iPhone应用

如您所见,iPhone应用程序不应排在最后。

最佳答案

我更改了您的编译器功能,以支持字符串和数字
编译器函数中的问题是它减去字符串会产生NaN
我将其更改为

comparator: function (item1, item2) {
    var sortValue = (item1.get(this.sort_key) > item2.get(this.sort_key)) ? 1 : -1;
    return sortValue * this.sort_order;
},


它将进行比较,为a> b获得值1,然后像您所做的那样将其更改为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;
}


jsFiddle updated

关于javascript - Backbone 订单收集按字母顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26756801/

10-09 17:37