我目前在 dgrid 上使用自定义排序功能(粘贴在下面)。它不会彻底改变排序,只是对一个特定列进行唯一排序,并对其他列进行排序,不区分大小写。我想通过名为“scheduled”的列添加辅助排序,以便在对任何其他列进行排序时添加到排序中。我只是不知道该怎么做。我已经看到了如何覆盖排序以按两列排序,但不是在使用自定义排序时。二级排序将始终存在,无论单击哪个其他列。
作为参考,我正在运行 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();