2016-08-03 1 views
0

Я пытаюсь реализовать 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() возвращают только данные на текущей странице. Это правда? Если да, как я могу получить данные на других страницах?

ответ

0

Да, это правда. Если вы установите для параметра на стороне сервера значение true, данные данных ожидают, что вы будете обрабатывать страницы на своем сервере (т. Е. Запрос данных будет запрашивать заданную страницу набора данных, и ваш сервер должен быть готов к возврату результатов запрос для данной страницы). Если вы не имеете дело с большим количеством данных и хотите избежать создания разбивки на страницы, вам лучше установить параметр serveride на false, и данные по ним будут позаботиться. Таким образом, все, что вам нужно сделать, это предоставить все данные сразу. Подробнее об этом: https://datatables.net/examples/data_sources/server_side.html

+0

Спасибо за ответ @Thiago Franco. Есть ли способ получить все значения с установленной на стороне сервера значением true? – rav

+0

@rav Единственный способ сделать это потребовал бы, чтобы сервер сразу отправил все данные клиенту, что поражает точку обработки на стороне сервера. Вероятно, лучший способ сделать то, что вам нужно, - написать собственный серверный код, который получает любые данные из всех строк и отправляет их в обработанной форме клиенту (если вы против того, чтобы просто не использовать серверный сервер) –

Смежные вопросы