2011-09-18 8 views
6

Soy nuevo en Sencha Touch y aún no estoy seguro de sus patrones de manejo de datos. La forma en que quiero configurar mi aplicación es algo como esto:Sincronización de almacenamiento Sencha Touch

  1. recuperar los datos del usuario desde el servidor remoto a través de AJAX.

  2. Guárdalo en el almacenamiento local. Cualquier modificación (edición, adición o eliminación de elementos) actualiza los datos locales.

  3. En algún momento (cuando el usuario hace clic en 'sincronizar', cuando el usuario cierra la sesión, o algo así), los datos almacenados almacenados localmente se sincronizan con el servidor, nuevamente, a través de una solicitud AJAX.

Entonces, ¿cuál sería la estructura básica de mi aplicación para lograr este patrón? Y también, mientras estamos aquí, ¿hay alguna manera de usar una base de datos local (a diferencia del almacenamiento de clave-valor local) para una tienda específica en Sencha Touch?

+1

Tengo la misma situación ahora. – Neutralizer

Respuesta

8

En primer lugar, Sencha.IO Sync proporciona la funcionalidad que está buscando. Todavía está en versión beta, pero probablemente hará exactamente lo que necesita y no tendrá que alojar la base de datos usted mismo: http://www.sencha.com/products/io

Para mí, he creado aplicaciones que utilizan el proxy localstorage para almacenar datos localmente. Es súper fácil. Aquí hay un par de ejemplos del uso de almacenamiento de datos:

  1. http://www.sencha.com/learn/taking-sencha-touch-apps-offline/
  2. http://data-that.blogspot.com/2011/01/local-storage-proxy-with-sencha-touch.html
  3. http://davehiren.blogspot.com/2011/09/sencha-touch-working-with-models.html
  4. http://www.sencha.com/learn/working-with-forms/

Más adelante en la aplicación tengo una llamada AJAX que se llevará a todos que los datos locales y enviarlo al servidor para generar algunos informes.

Una vez que haya configurado correctamente sus tiendas y modelos, es fácil recuperar los datos. Por ejemplo, tengo una tienda contactinfo que sólo alguna vez tiene una entrada:

var myContactInfo = contactInfo.first().data; 

tengo otra tienda llamada configuración, que tiene muchas entradas. Puedo recuperar fácilmente como esto (aunque puede haber una mejor manera):

var settingsArr = [] 
settings.each(function() { 
    settingsArr.push(this.data); 
}); 

A continuación, puedo enviar fácilmente este hasta el servidor de esta manera:

var data = {settings: settingsArr, contactInfo: myContactInfo}; 
Ext.Ajax.request({ 
url: 'save.php', 
params: {json: Ext.encode(data)}, 
success: function(response, opts) { 
     // celebrate 
} 
}); 

Al igual que con todas las cosas un buen mira los ejemplos y la API debería ayudarte una vez que tengas los conceptos básicos resueltos: http://dev.sencha.com/deploy/touch/docs/?class=Ext.data.Store

+0

beautifuly respondió. –

+0

Parece que Sencha.io es una solución de nube interna. Se sincronizará entre los dispositivos que programe con Sencha. Sin embargo, si buscas sincronizar entre tu aplicación Sencha y tu servidor REST (¿Rails quizás?), Entonces no hay _sync_ disponible como lo hay para otros sistemas. A menos que me equivoque con sencha, solo tiene tres opciones: almacenamiento en línea, almacenamiento fuera de línea o almacenamiento en caché sin lectura.No se puede leer/escribir el almacenamiento en caché sin conexión como se esperaría con una sincronización bidireccional. – Sukima