2014-09-19 16 views
7

Serwer zwraca 15 rekordów na stronę, a całkowita liczba rekordów przekracza 2000. Chciałbym wyświetlić pierwsze 15 rekordów, a następnie za każdym kliknięciem przycisku "Dalej" wyświetlić pozostałe wszystkie rekordy , (15 na stronę). W tym celu robimy stronę po stronie serwera lub po stronie klienta ???Paginacja po stronie serwera przy użyciu datatables

Oto mój stół i atrybuty im użyciem paginacji w DataTables:

var tableData = self.accountCollection.getData(); 

     var tableColumns = this.accountCollection.getColumns(); 
     var totalRecs = this.accountCollection.length; 

     //create the UI grid containing the list of items 

     this.resultsTable = tableEl.dataTable({ 
      "bServerSide": true, 
      "sEcho": 3, 
      "iTotalRecords": totalRecs, 
      "iTotalDisplayRecords": 15, 
      "aaData": tableData, 
      "aoColumns": tableColumns, 
      "aaSorting": [[1,'asc']], 
      }); 



getData: function() { 

     var returnData = []; 
     $.each(this.models, function (idx, accountModel) { 
      returnData.push(accountModel.attributes); 
     }); 
     return returnData; 
    }, 

returnData zwróci mi obiektu, który ma pola i będzie zapełnianych tabeli IA: Object retuned: (w przybliżeniu)

Object 
accountName: "No Company" 
address1: "1234 asdf" 
    address2: "" 
    billingAcctId: null 
    billingSystem: null 
    city: "mountain view" 
    comments: null 
    country: "USA" 

getData() funkcja zostanie następnie nazywa się retuen dane z datatbase z:

var tableData = this.accountCollection.getData() 

tak w zasadzie tableData będzie mieć niezbędne pola i wartości do wyświetlenia w tabeli. Teraz mogę mieć więcej niż 1000 rekordów zwróconych z serwera. Dlatego potrzebowałem stronicowania. Ten w skrzypcach jest tym, co próbowałem i nie ma żadnego wpływu na paginatynę .. :(

Myślę, że mam podstawową paginację, która pochodzi z datatables, ale teraz muszę mieć stronę serwera, aby dostaję tylko 15 rekordów do wyświetlenia w tym samym czasie, a po kliknięciu przycisku "następny" i "poprzedni" powinienem być w stanie wykonywać wywołania ajax, aby uzyskać pozostałe rekordy 15 na stronę ...

Mam nadzieję, że to pomoże lepiej powiedz, daj mi znać, jeśli potrzebujesz więcej informacji:

Jak mogę uzyskać paginację za pomocą datatables? Proszę dać mi znać, jeśli potrzebujesz więcej informacji ..

Dzięki

Odpowiedz

0

wygląda ten swój zaułek ->http://datatables.net/examples/data_sources/js_array.html To wyłącznie po stronie klienta

Choć, o ile wiem, to jedyny sposób, aby osiągnąć rzeczywistą paginacji (czyniąc to szybciej, bo jesteś tylko pobieranie 15 rekordów z bazy danych na raz) jest przez ajaxing ze strony serwera (np http://datatables.net/examples/data_sources/server_side.html)

To nie wygląda na to, że to robisz. Chyba że ... self.accountCollection.getData() to wywołanie ajaxowe, ale w każdym przypadku gdy tworzysz DataTable, powinieneś użyć "ajax: tableData", a nie "aaData: tableData".

Użytkownik może pomylić JSON, który zwraca zestaw danych, z interfejsem API datatables, którego używa się do interakcji/inicjowania z datatable.

Przepraszam, to było trochę lol, czy to ma sens?

+0

dobrze „self.accountCollection” jest pobieranie lista użytkowników z serwera: coś jak poniżej .. this.accountCollection = new ipiadmin.collections.AccountCollection(); czy nadal ma sens wywoływanie po stronie klienta ...? – user1234

+0

można zastąpić self.accountCollection w celu uwzględnienia szczegółów paginacji w JSON, który pobiera. Zasadniczo chcesz, aby twój JSON wyglądał jak {"sEcho": 15, "iTotalRecords": 2000, "iTotalDisplayRecords": 2000, "aaData": [twoje pierwsze 15 wierszy danych]} następnie użyj self.accountCollection jako źródło ajax w swoim datatable init. Co ciekawe, jaki jest twój stack (klient i serwer)? –

+0

jest jakikolwiek sposób dostarczenia przykładu ... Dzięki za pomoc! – user1234

3

enter image description here

Paginacja działa całkowity wyświetlany rekord należy wykonać następujące minimalne zmiany.

„iTotalDisplayRecord” będzie całkowite przefiltrowane rekordy