【问题标题】:Backbone order collection alphabetically骨干订单集合按字母顺序
【发布时间】:2014-11-05 12:05:21
【问题描述】:

我目前正在开发一个主干应用程序,我想根据各种属性订购我的收藏,我根据成本、持续时间、开始和结束日期(时间戳)对工作进行排序,但我正在努力对基于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 应用程序, Windows 应用程序 iPhone应用程序

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

【问题讨论】:

  • comparator: 'name'
  • 这只会让我的页面无限加载。

标签: javascript backbone.js backbone.js-collections


【解决方案1】:

我更改了您的比较函数以支持字符串和数字 您的比较器函数中的问题是它减去产生 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

【讨论】:

  • 这是因为 iPhone 是小写的,我想我们应该修改比较器函数来单独处理字符串,我会检查并返回
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 2021-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多