Unidad 24. AJAX y Spry Framework (XI)

24.9. Filtros

Otra posibilidad a la hora de decidir qué registros mostrar o no son los filtros.

Un filtro se aplica sobre un dataset y descarta las filas que no lo cumpla.

Podrás aplicar un filtro dinámicamente y hacer que se aplique cuando se produzca determinado evento.

 

Al aplicar el filtro en un comportamiento deberemos establecer una función que contendrá las directrices que se deberán seguir para decidir si una fila se muestra o no.

El modo en el que declararemos la aplicación de un filtro en un comportamiento dinámico es el siguiente:

<a href="#" onclick="miDataSet.filter(miFuncion);">Filtrar registros</a>

Esta función deberá ser declarada cuando se crea el dataset.

Por ejemplo:

<script type="text/javascript">

 var miDataSet = new Spry.Data.XMLDataSet("archivo.xml", "listado/elemento");

 miDataSet.setColumnType('@id', 'number');

 

var miFuncion = function(dataSet, row, rowNumber) {

     if (row["propiedad"] == "valor") {

        return row;

     } else {

        return null;

     }

 }

 

</script>

En este ejemplo podemos ver como se declara un dataset, y una de sus columnas se declara también de tipo numérico.

Luego introducimos la función que llamaremos en el evento onclick.

onclick="miDataSet.filter(miFuncion);"

La estructura de esta función será siempre la misma. Simplemente deberás cambiar la condición que hará que la fila se desprecie o no.

Lo único que deberás recordar es que para referenciar a una columna deberás utilizar la sintaxis row["propiedad"].

El resto continuará completamente igual, e incluso podrás utilizar el método de búsqueda con expresiones regulares que vimos en el apartado anterior:

var miFuncion = function(dataSet, row, rowNumber) {

     if (row["propiedad"].search(^/An/) == -1) {

        return row;

     } else {

        return null;

     }

 }

Cuando se produzca el evento se filtrarán los resultados.

Podrás volver a mostrar los datos originales llamando al metodo filter pero sin pasarle ninguna función:

<a href="#" onclick="miDataSet.filter();">Mostrar todos</a>

Esto regenerará el dataset y volverá a mostrar los registros sin filtrar.

 

 

Existe otra posibilidad que filtra el dataset destructivamente.

Es decir, el filtro que se aplica no puede ser revertido, y las filas despreciadas se borran del dataset.

Para ello deberás utilizar el método filterData de la siguiente forma:

<a href="#" onclick="miDataSet.filterData(miFuncion);">Filtrar sin vuelta atrás</a>

El funcionamiento de este filtro es exactamente igual al anterior.

También requiere de la misma función y actúa del mismo modo.

La única diferencia se encuentra en que no podrás recuperar las filas que haya quitado el filtro.

Esto puede ser útil, para agilizar el dataset, si es muy grande pero hay muchos datos que no se van a utilizar.

 

Para practicar estos conceptos realiza el Ejercicio Paso a Paso Crear un Filtro.

Pág. 24.11

Atrás  Inicio  Adelante