Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

Cuando queremos paginar los resultados en nuestra plantilla de gadget, utilizamos el enfoque multidatasource que nos permite realizar alguna transformación del servidor como limit, group, select, param, where, ...

En nuestra muestra, podemos obtener los datos página por página con la siguiente instrucción:

vm.from("{{datasource}}").skip(step*bulk).limit(bulk).exec().then

Ahora podemos 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
};

  • No labels