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