El desarrollo de soluciones web desde siempre se ha enfrentado a diversos desafíos de implementación pero la llegada de HTML5 dió una frescura a estos diversos ambientes como es el almacenamiento desconectado.
El nivel de interacción de las soluciones Web actuales requiere sin lugar a dudas de estas características de almacenamiento desconectado. La idea es poder implementar mecanismos semi-conectados o desconectados de una forma mucho más flexible.
En este artículo vamos a abordar el tema de IndexedDB, donde resolveremos una simple implementación paso a paso de un administrador de tareas que independiente de la conexión sigue funcionando.
Para realizar la solución propuesta tendremos que pensar en abrir el repositorio de datos y generar los objetos de persistencia, luego establecer el mecanismo para agregar y visualizar los datos, finalmente establecer la estrategia de eliminación de los objetos.
Construyendo la solución
Diseño de la interfaz de usuario
html5redtask.indexedDB.open = function() {
var request = indexedDB.open("Redtask","Nuestras tareas en rojo como el día laboral");
//Si la operación para abrir es correcta.
request.onsuccess = function(e) {
var v = "1.99";
html5redtask.indexedDB.db = e.target.result;
var db = html5redtask.indexedDB.db;
if (v!= db.version) {
var setVrequest = db.setVersion(v);
setVrequest.onerror = html5redtask.indexedDB.onerror;
setVrequest.onsuccess = function(e)
{
if(db.objectStoreNames.contains("task"))
{
db.deleteObjectStore("task");
}
var store = db.createObjectStore("task",
{keyPath: "timeStamp"});
e.target.transaction.oncomplete = function() {
html5redtask.indexedDB.getTaskItems();
};
};
}
else {
request.transaction.oncomplete = function() {
html5redtask.indexedDB.getTaskItems();
};
}
};
request.onerror = html5redtask.indexedDB.onerror;
}
|
Agregando datos al contenedor y visualizando resultados
// Agregar una tarea
html5redtask.indexedDB.addTask = function(todoText) {
var db = html5redtask.indexedDB.db;
var trans = db.transaction(["task"], "readwrite");
var store = trans.objectStore("task");
var data = {
"text": todoText,
"timeStamp": new Date().getTime()
};
var request = store.put(data);
//Si todo salió bien
request.onsuccess = function(e) {
html5redtask.indexedDB.getTaskItems();
};
//Si ocurrieron errores
request.onerror = function(e) {
console.log("Error: ", e);
};
};
|
Eliminando elementos del repositorio
//Para Borrar una tarea
html5redtask.indexedDB.deleteTask = function(id) {
var db = html5redtask.indexedDB.db;
var trans = db.transaction(["task"], "readwrite");
var store = trans.objectStore("task");
var request = store.delete(id);
//La operación de borrado es correcta
request.onsuccess = function(e) {
html5redtask.indexedDB.getTaskItems();
};
//La operación de borrado o eliminación no es correcta
request.onerror = function(e) {
console.log("Error: ", e);
};
|
|
Nicolás es director de relaciones para desarrolladores en latinoamérica región sur para Google. El ha desarrollado comunidades académicas y de investigación en varios países de Latinoamérica sobre la plataforma de desarrollo web y mobile de Google. Además Nicolas es profesor universitario, donde trabaja fuertemente en arquitecturas de software, ambientes emergentes e innovación en modelos de ingeniería de software
|
Nivel: Intemedio



No hay comentarios:
Publicar un comentario en la entrada