Я пытаюсь реализовать footerCallback
, чтобы найти сумму всех элементов в одном из столбцов моей таблицы с разбивкой по страницам. Когда я пытаюсь вычислить общую сумму на всех страницах, рассчитывается только сумма строк на текущей странице. Мой код footerCallback выглядит следующим образом:Получите все значения столбцов из разбитого на страницы jQuery DataTable с serverSide, установленным в true
"footerCallback": function (row, data, start, end, display) {
var api = this.api(), data;
// Remove the formatting to get integer data for summation
var intVal = function (i) {
return typeof i === 'string' ?
i.replace(/[\$,]/g, '')*1 :
typeof i === 'number' ?
i : 0;
};
// Total over all pages
total = api
.column(5)
.data()
.reduce(function (a, b) {
return intVal(a) + intVal(b);
}, 0);
// Total over this page
pageTotal = api
.column(5, { page: 'current'})
.data()
.reduce(function (a, b) {
return intVal(a) + intVal(b);
}, 0);
// Update footer
jQuery(api.column(5).footer()).html(
'$'+pageTotal +' ($'+ total +' total)'
);
}
Эта функция задается в Ajax вызова вместе с колоннами и columndefs. Оба, pageTotal и total возвращают одинаковое значение. Когда я пытаюсь выполнить команду table.column("#header5").data();
в консоли, даже она возвращает только данные на текущей странице. На одном из веб-сайтов я читал, что, когда серверная сторона задана верно, data()
и fnGetData()
возвращают только данные на текущей странице. Это правда? Если да, как я могу получить данные на других страницах?
Спасибо за ответ @Thiago Franco. Есть ли способ получить все значения с установленной на стороне сервера значением true? – rav
@rav Единственный способ сделать это потребовал бы, чтобы сервер сразу отправил все данные клиенту, что поражает точку обработки на стороне сервера. Вероятно, лучший способ сделать то, что вам нужно, - написать собственный серверный код, который получает любые данные из всех строк и отправляет их в обработанной форме клиенту (если вы против того, чтобы просто не использовать серверный сервер) –