Data Store

Los almacenes de datos (data store) se utilizan para encapsular o almacenar una colección de instancias de un modelo determinado. Además disponen de funciones para ordenar, filtrar y consultar los datos. De forma opcional podemos indicar que utilicen un proxy para sincronizar estos datos con un almacén local o remoto.

En esta sección nos vamos a centrar en las características para gestionar un store: añadir, ordenar, filtrar, buscar y eliminar. En la siguiente sección sobre proxies veremos como hacer persistentes estos datos.

Crear un Data Store

Crear un almacén de datos es fácil, utilizaremos el constructor Ext.create('Ext.data.Store', {...}) y como segundo parámetro le pasaremos las opciones de configuración indicando el nombre del modelo:

var myStore = Ext.create('Ext.data.Store', {
    model: 'User'
});

Añadir datos

Podemos añadir datos directamente junto a la definición de un Store, solo tenemos insertarlos como un array a través de su propiedad "data". Suponiendo que el modelo "User" solo tuviera dos campos (id, name), podríamos añadir datos de la forma:

var myStore = Ext.create('Ext.data.Store', {
    model: 'User',
    data: [
        {id: 1, name: 'Javier Gallego'},
        {id: 2, name: 'Fran García'},
        {id: 3, name: 'Boyan Ivanov'},
        {id: 4, name: 'Miguel Lozano'}
    ]
});

O también podemos añadir datos posteriormente llamando a la función "add" del objeto:

myStore.add({id: 5, name: 'Javier Aznar'},
            {id: 6, name: 'Pablo Suau'});

Ordenar y Filtrar elementos

Para ordenar y filtrar los datos usamos las propiedades "sorters" y "filters". En el siguiente ejemplo se ordenan los datos de forma descendente por nombre de usuario (también podría ser ASC) y se realiza un filtrado por género (los filtros también admiten expresiones regulares).

Ext.create('Ext.data.Store', {
    model: 'User',
    sorters: [
        { property: 'usuario', direction: 'DESC' }
    ],
    filters: [
        { property: 'genero', value: 'Femenino' }
    ]
});

Buscar registros

En algunos casos antes de añadir un registro será necesario comprobar si el registro está repetido. Para esto podemos utilizar el método findRecord(campo, valor) del Store, el cual devuelve el registro encontrado o null en caso de no encontrar ninguna coincidencia. En el siguiente ejemplo se compara el campo id de los datos del Store, con el campo id del registro a añadir:

if (myStore.findRecord('id', registro.data.id) === null)
{
    myStore.add( registro );
}

Otra opción para buscar registros es la función find(campo, valor) la cual devuelve el índice del registro encontrado (o -1 en caso de no encontrarlo), y posteriormente podríamos llamar a getAt(index) para obtener los datos.

Eliminar registros

Para eliminar un registro de un Store usaremos la función remove(registro), por ejemplo:

myStore.remove( registro );

Es recomendable comprobar si existe el registro a eliminar, para esto usaremos la función findRecord(). Normalmente el Store estará asignado a algún panel que nos permita ver los datos (como un listado). Si quisiésemos eliminar un registro de este listado, primero tendríamos que obtener el Store usado, a continuación comprobar si existe el registro y si es así eliminarlo. Por último habría que sincronizar los datos para que se actualicen, de la forma:

var store = miListado.getStore();

if( store.findRecord('id', registro.data.id) )
{
    store.remove( registro );
}

store.sync();
miListado.refresh();

También podemos utilizar la función removeAt(index) para eliminar los registros de un Store a partir de su índice.

Last updated