主干日期+其他参数排序

backbone date + other parameters sorting

本文关键字:参数 排序 其他 日期      更新时间:2023-09-26

因此,这是有效的:

comparator: function(model) {
  if(this.activeSort == "time_created") {
    return -(Date.parse(model.get('time_created')) || 1);
  } else {
    var sort = [ 
      model.get('title'), 
      model.get('category'), 
    ];
    return sort;
  }
}

但是,如果我想按"time_created"和其他参数(title、category)进行排序,则排序将不再有效。我想不通!

基本上,我希望这个工作:

comparator: function(model) {
  if(this.activeSort == "time_created") {
    var sort = [ 
      // date descending
      -(Date.parse(model.get('time_created')) || 1), 
      model.get('title'), 
      model.get('category'), 
    ];
    return sort;
  } else {
    var sort = [ 
      model.get('title'), 
      model.get('category'), 
    ];
    return sort;
  }
}

您确实应该使用双参数比较器。返回数组不是使单参数比较器作为多属性比较器工作的好方法,主要是因为它不能可靠地工作(正如您所发现的)。

因此:

comparator: function(o1, o2) {
  var v1, v2;
  if (this.activeSort == "time_created") {
    v1 = Date.parse(o1.get("time_created")) || 1;
    v2 = Date.parse(o2.get("time_created")) || 1;
    if (v1 > v2)
      return -1;
    if (v2 > v1)
      return 1;
  }
  v1 = o1.get("title");
  v2 = o2.get("title");
  if (v1 < v2)
    return -1;
  if (v2 < v1)
    return 1;
  v1 = o1.get("category");
  v2 = o2.get("category");
  if (v1 < v2)
    return -1;
  if (v2 < v1)
    return 1;
  return 0;
}