带有辅助排序列的{dgrid自定义排序

时间:2016-08-23 19:28:34

标签: dojo dgrid dstore

我目前在dgrid上使用自定义排序功能(粘贴在下面)。它没有彻底改变排序,只是对一个特定列进行唯一排序,并对其他列不区分大小写进行排序。我希望通过名为"预定"的列添加辅助排序。在排序任何其他列时添加到排序。我只是不确定如何去做。我已经看到如何覆盖排序以按两列排序,但不是在自定义排序正在进行时排序。辅助排序将始终存在,无论点击其他列是什么。

作为参考我正在运行dojo 1.10和dgrid 1.0。数据来自RequestMemory DStore,我真的宁愿这种情况发生在网格上,而不是发生在商店层面。任何帮助将不胜感激。



currGrid.on('dgrid-sort', function (event) {
  event.preventDefault();
  var sort = event.sort[0];
  currGrid.set('sort', function (a, b) {
     if (sort.property == "thisField") {
       //special sort for thisField
       if (a[sort.property] !== 'undefined' && typeof a[sort.property] == "string") {
          var colorA =  a[sort.property].split("|");
          var aValue = colorA[0].toLowerCase();
       }
       if (b[sort.property] !== 'undefined' && typeof b[sort.property] == "string") {
          var colorB =  b[sort.property].split("|");
          var  bValue = colorB[0].toLowerCase();
       }
       if (String(aValue) == String(bValue)) {
          var result = 0;
       } else if (dojo.string.trim(aValue) == "") {
          var result = true ? 1 : -1;
       } else if (dojo.string.trim(bValue) == "") {
         var result = true ? -1 : 1;
       } else {
         var result = aValue > bValue ? 1 : -1;
       }
       return result * (sort.descending ? -1 : 1);
     } else {
       //Sort for all other fields same as always (except toLowerCase)
       if (a[sort.property] !== 'undefined' && typeof a[sort.property] == "string") {
          var aValue = a[sort.property].toLowerCase();
       } else {
          var aValue = "";
       }
       if (b[sort.property] !== 'undefined' && typeof b[sort.property] == "string") {
          var bValue = b[sort.property].toLowerCase();
       } else {
          var bValue = "";
       }
       var result = aValue > bValue ? 1 : -1;
       return result * (sort.descending ? -1 : 1);
     }
  });
  currGrid.updateSortArrow(event.sort, true);
});
currGrid.startup();




1 个答案:

答案 0 :(得分:0)

您可以执行以下操作。

currGrid.on('dgrid-sort', function (event) {
    event.preventDefault();
    var sortSet = [];
    sortSet.push(event.sort[0]);
    sortSet.push({property: "scheduled"});
    currGrid.set('sort', function (a, b) {
        var aValue, bValue, result = 0;
        for(var i = 0; i < sortSet.length; i++){
            var sort = sortSet[i];
            if (sort.property == "thisField") {
                //special sort for thisField
                if (a[sort.property] !== 'undefined' && typeof a[sort.property] == "string") {
                    var colorA =  a[sort.property].split("|");
                    aValue = colorA[0].toLowerCase();
                }
                if (b[sort.property] !== 'undefined' && typeof b[sort.property] == "string") {
                    var colorB =  b[sort.property].split("|");
                    bValue = colorB[0].toLowerCase();
                }
                if (String(aValue) == String(bValue)) {
                    result = 0;
                } else if (dojo.string.trim(aValue) == "") {
                    result = true ? 1 : -1;
                } else if (dojo.string.trim(bValue) == "") {
                    result = true ? -1 : 1;
                } else {
                    result = aValue > bValue ? 1 : -1;
                }
                return result * (sort.descending ? -1 : 1);
            } else {
                //Sort for all other fields same as always (except toLowerCase)
                if (a[sort.property] !== 'undefined' && typeof a[sort.property] == "string") {
                    aValue = a[sort.property].toLowerCase();
                } else {
                    aValue = "";
                }
                if (b[sort.property] !== 'undefined' && typeof b[sort.property] == "string") {
                    bValue = b[sort.property].toLowerCase();
                } else {
                    bValue = "";
                }
                //You need this check here 
                if(aValue != bValue){
                    result = aValue > bValue ? 1 : -1;
                    return result * (sort.descending ? -1 : 1);
                }
            }
        }
        return 0;
    });
    currGrid.updateSortArrow(event.sort, true);
});
currGrid.startup();  

我对您的代码有些担忧,变量result, aValue and bValue在if语句中都是本地的,但它们正在语句之外使用。如果在全局空间中使用相同名称定义了一些其他变量,则可能导致错误的结果。所以我修改了它们。

所以第二部分需要检查aValue == bValue是否返回0。