/
Pagination in gadget templates
Pagination in gadget templates
When you want to paginate the results in our gadget template, you can use the multidatasource approach, that allow you to perform some server transformation like: limit, group, select, param, where, …
In your sample, you can get the data page by page with the following statement:
vm.from("{{datasource}}").skip(step*bulk).limit(bulk).exec().then
Now, you can iterate through the results with, for example, the recursive async function iterateResult. You need to call it first with the initial parameters:
vm.acum = [];
var bulk = 1000;
var step = 0;
iterateResult(vm.acum, step, bulk, callback);
The callback function will be call when all the data has been retrieved:
//function for doing something after all records are recover
function callback(){
alert("Recovered " + vm.acum.length + " records")
}
The full code of the example is the following:
//recurse async function for recovering data. When all data is processed callback function is called
function iterateResult(acum,step,bulk,callback){
var acum = acum;
var step = step;
var bulk = bulk;
var callback = callback;
//salesimportonto_raw is the datasource
vm.from("salesimportonto_raw").skip(step*bulk).limit(bulk).exec().then(
function(data){
if(data!=null && data.length>0){//there is more data
acum.push.apply(acum, data);
step++;
iterateResult(acum,step,bulk,callback);
}
else{//there isn't more data
//Paginate finished, now draw chart or other things
callback()
}
}
)
}
//function for doing something after all records are recover
function callback(){
alert("Recovered " + vm.acum.length + " records")
}
//This function will be call once to init components
vm.initLiveComponent = function(){
vm.acum = [];
var bulk = 1000;
var step = 0;
iterateResult(vm.acum, step, bulk, callback);
//Here we don't have the result because async function
};