Paginación en plantillas de gadgets
Cuando quieras paginar los resultados en nuestra plantilla de gadget, debes utilizar el enfoque multidatasource, que te permite realizar alguna transformación del servidor como: limit, group, select, param, where, ...
En tu muestra, puedes obtener los datos página por página con la siguiente instrucción:
vm.from("{{datasource}}").skip(step*bulk).limit(bulk).exec().then
Ahora puedes iterar por los resultados con, por ejemplo, la función asíncrona recursiva iterateResult. Es necesario llamar primero con los parámetros iniciales:
vm.acum = [];
var bulk = 1000;
var step = 0;
iterateResult(vm.acum, step, bulk, callback);
La función callback se llamará cuando se hayan recuperado todos los datos:
//función para hacer algo después de recuperar todos los registros
function callback(){
alert("Recuperando " + vm.acum.length + " registros")
}
El código completo del ejemplo es el siguiente:
//función asíncrona recursiva para recuperar los datos. Cuando se procesan todos los datos se llama a la función callback
function iterateResult(acum,step,bulk,callback){
var acum = acum;
var step = step;
var bulk = bulk;
var callback = callback;
//salesimportonto_raw es la 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
//Paginación acabada, ahora dibujar gráfico u otras cosas
callback()
}
}
)
}
//función para hacer algo después de recuperar todos los registros
function callback(){
alert("Recuperando " + vm.acum.length + " registros")
}
//Esta función se llamará una vez para initar los componentes
vm.initLiveComponent = function(){
vm.acum = [];
var bulk = 1000;
var step = 0;
iterateResult(vm.acum, step, bulk, callback);
//Aquí no tenemos el resultado por la función asíncrona
};