Мне нужно настроить сортировку нескольких столбцов в таблице операций с учетной записью. Я решил пойти с jQuery DataTables. Всякий раз, когда я нажимаю заголовок столбца, чтобы сортировать этот столбец (скажем, столбец x), я хочу, чтобы он сортировал по столбцу 3 для любых совпадений в столбце x. Если я нажму столбец 3, тогда он должен сортировать по столбцу 0, если в столбце указаны совпадения.По умолчанию вторичная сортировка
Я видел fnSortListener и fnSort, и похоже, что я смог выполнить свою задачу, присоединив их к каждой колонке. но это кажется действительно избыточным, так как каждый столбец должен выполнять свою вторичную сортировку по столбцу 3, за исключением столбца 3.
Итак, есть ли способ, чтобы DataTables всегда выполнял вторичный сортировку по столбцу 3, а затем указывал исключение для столбца 3?
Любая помощь приветствуется. Я очень новичок в этом плагине. Благодаря!
Редактировать
Вот что я попал собирается с. Первый 2D-массив указывает, как сортировать первый клик, а второй 2d-массив указывает, как сортировать второй клик.
var Sorter = function($dataTable) {
return {
bindMultiSort: function(headerSelector, firstOrderTuples, secondOrderTuples) {
var order = 0;
this.removeSorting(headerSelector).click(function() {
if (order === 0) {
$dataTable.fnSort(firstOrderTuples);
order = 1;
} else {
$dataTable.fnSort(secondOrderTuples);
order = 0;
}
});
},
removeSorting: function(headerSelector) {
var $header = $(headerSelector);
$header.unbind('click');
return $header;
}
};
};
function attachSecondarySorting($transactionsTable) {
var sorter = new Sorter($transactionsTable);
sorter.bindMultiSort('#posted', [[POSTED_DATE_COL, "asc"], [DESCRIPTION_COL, "asc"]], [[POSTED_DATE_COL, "desc"], [DESCRIPTION_COL, "asc"]]);
sorter.bindMultiSort('#received', [[RECEIVED_DATE_COL, 'asc'], [DESCRIPTION_COL, 'asc']], [[RECEIVED_DATE_COL, 'desc'], [DESCRIPTION_COL, 'asc']]);
sorter.bindMultiSort('#category', [[TRANSACTION_TYPE_COL, 'asc'], [POSTED_DATE_COL, 'desc'], [DESCRIPTION_COL, 'asc']], [[TRANSACTION_TYPE_COL, 'desc'],
sorter.bindMultiSort('#description', [[DESCRIPTION_COL, 'asc'], [POSTED_DATE_COL, 'desc']], [[DESCRIPTION_COL, 'desc'], [POSTED_DATE_COL, 'desc']]);
sorter.bindMultiSort('#moneyIn', [[MONEY_IN_COL, 'asc'], [DESCRIPTION_COL, 'asc']], [[MONEY_IN_COL, 'desc'], [DESCRIPTION_COL, 'asc']]);
sorter.bindMultiSort('#moneyOut', [[MONEY_OUT_COL, 'asc'], [DESCRIPTION_COL, 'asc']], [[MONEY_OUT_COL, 'desc'], [DESCRIPTION_COL, 'asc']]);
}
вы можете уточнить, что вы имеете в виду, когда вы говорите, что вы хотите отсортировать по одному столбцу, где результаты в другом столбце? и что происходит с данными, если в столбце нет совпадений? – jimmym715
или вы просто говорите, что щелчок по столбцу x сортирует сначала по столбцу x, а затем по столбцу 3, за исключением столбца 3, который сортирует по столбцу 3, а затем по столбцу 0? – jimmym715
Альтернативой является то, что пользователь может контролировать вторичную сортировку. Если они нажмут на два разных столбца, первый будет вторичным, а второй будет основным - пока вы будете использовать * стабильную * сортировку. Принуждение вторичного ключа предотвратит это. –