How to use deferLoading if we don't know the total amount of entries in the database?
How to use deferLoading if we don't know the total amount of entries in the database?
Hi,
I am currently working on a project, where I display every virtual machines available on Azure. As there is a lot of data, I would like to use deferLoading from DataTable. The thing is, either I use deferLoading with integer value, or array value, in both cases, I don't know what is the total amount of entries in the database (the database is sometimes updated, and the total amount of entries subject to change).
So I am wondering how could I handle this ?
While waiting to find a solution using deferLoading, I am also trying to change de drawCallback option, to change the function called when clicking the "Next" or "Previous" buttons. So I would only load 25 new entries in the datable, which would replace the data already present in the datatable.
Another way to solve my problem is to use a static table, but I won't have all the possibilities that a DataTable can offer.
Here is the current JavaScript code :
$('#table').DataTable({
pageLength: 25,
/*
processing: true,
serverSide: true,
deferLoading: [25, x],
*/
drawCallback: function() {
// .off() disables the regular action of #table_<name> button
// so the program will only execute the function we want.
$("#table_next").off().click(function(event) {
showNextVMs();
});
$("#table_previous").off().click(function(event) {
showPreviousVMs();
});
}
});
Do not hesitate to share any advice, I never used DataTables before, I may miss some good practices.
This question has an accepted answers - jump to answer
Answers
The only way I can think of to get the total rows from the server is with an ajax request. Then in the ajax success function initialize Datatables and use the value in the response. Pseudo code example:
Kevin
Hi,
Thanks for your help !
It works fine, I was able to get the correct amount of virtual machines. I just have a last question that's induced by that solution. I didn't manage to find the answer.
So I have this code now, the thing is, how can access datatable methods in its declaration ? I need to send some information about the datatable when I call my controller method. Indeed, I have a reference error, because the datatables methods I call are not know at that moment.
These are already sent via the Server Side Processing Protocol. You can calculate the page number by taking
start / length
. But if you need the specificpageNumber
andquantity
parameters populated you will need to use a function forajax.data
. See the last two examples in theajax.data
docs.Additionally you have not defined the
table
variable, ie,var table = $('#table').DataTable({...
. variable scoping may become a problem so you might need to use$('#table').DataTable().page()
instead.Kevin