骨干订单按字母顺序收集

时间:2014-11-05 12:05:21

标签: javascript backbone.js backbone-collections

我目前正在研究骨干应用程序,我想根据各种属性订购我的收藏,我根据成本,持续时间,开始和结束日期(时间戳)进行排序工作,但我正在努力排序基于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应用程序不应该在列表的最后。

1 个答案:

答案 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;
} 

jsFiddle updated