Mejorar las aplicaciones web con AmplifyJS

Parece que hay una nueva cosecha de bibliotecas de JavaScript de propósito especial cada semana. Al parecer, se acabaron los días de usar una sola biblioteca por proyecto. Hoy les presentaré una biblioteca de componentes muy interesante, AmplifyJS, que ofrece solo algunos componentes muy especializados..


Devs, Meet AmplifyJS

Según el sitio web:

AmplifyJS es un conjunto de componentes diseñados para resolver problemas comunes de aplicaciones web.

Suena prestigioso, pero lo que hay realmente en esta biblioteca.?

AmplifyJS tiene tres piezas principales:

  • Una API de AJAX
  • Un sistema de eventos PubSub
  • Una API de almacenamiento del lado del cliente

¡Únete a mí ahora para un recorrido por la increíble biblioteca AmplifyJS! Vamos a construir un rastreador de empleados súper simple; en realidad, es solo una tabla con algunas características de aplicación, cortesía (en parte) de AmplifyJS.

No necesitamos preocuparnos por los problemas de diseño y estilo de hoy, así que voy a utilizar la biblioteca de Bootstrap de Twitter. Es increíblemente simple: solo incluye el enlazar al archivo CSS, que te permiten hacer un enlace directo desde Github, y estás en el negocio.


Paso 1: Configurándolo

Entonces, hazte un directorio de proyectos. Comenzar con el index.html archivo, y un js carpeta. Ahora, diríjase al sitio web de AmplifyJS y haga clic en esa enorme, ¿descarga roja? botón. Una vez que tenga la biblioteca zip, extráigala y muévala a la js carpeta. Vamos a necesitar algunas otras cosas también:

  • jQuery: el componente AJAX de Amplify utiliza la función AJAX de jQuery debajo de su API, al menos de forma predeterminada. Pero usaremos jQuery para otras cosas, así que tráelo en.
  • bootstrap-modal.js: La biblioteca de Twitter Bootstrap incluye algunos scripts para obtener todos los interactivos. Y vamos a utilizar uno: el plugin jQuery de la ventana modal. Descárgalo y agrégalo a eso. js carpeta.
  • Hay otros dos scripts que mencionaré en el camino, pero estos nos escribiremos.

Entonces, comienza nuestro index.html archivo como este:

   Amplificar js    

Comandos

Empleados

Si no estás familiarizado con el uso de Twitter Bootstrap, verás que no es fácil de usar. Tenemos un envase eso es 940px de ancho. Entonces, tenemos dos filas. El primero tiene una columna, que cubre las 16 columnas. La otra tiene dos columnas: una tiene 4 columnas de ancho y la otra tiene 12 columnas de ancho..

Una cosa más, antes de llegar a un código real: vamos a abrir una ventana modal que permite ingresar empleados. Bajo la

, Añade este HTML de ventana modal. Sí, parece mucho código, pero son principalmente cosas de Bootstrap:

X

Agregar un empleado

De acuerdo, ¡estamos listos para irnos! Vamos a codificar.


Paso 2: Cableado de la ventana modal

Abrir un guión etiqueta en la parte inferior de index.html (Solo lo hago en línea, pero siento que debo ponerlo en un nuevo archivo JS). comienza de esta manera:

 (function () var employeeModal = $ ('# add-employee-modal'). modal (background: 'static'); ());

Estamos usando el plugin modal de Bootstrap aquí; ¿Esto solo? ¿Se instancia? La ventana modal. Ahora, queremos que aparezca la ventana cuando hacemos clic en "Agregar empleado". botón. Por supuesto, primero tendremos que agregar el botón: poner esto en el

, justo debajo de la

.

 

Ese data-controls-modal = 'add-employee-modal' atributo mostrará el modal con dicha ID cuando se hace clic en el botón.

Por lo tanto, el usuario deberá completar el formulario, haga clic en "Agregar". botón que tiene una identificación de crear empleado. Entonces, conectemos un controlador de eventos de clic para el botón:

$ ('# create-employee'). click (function () var form = $ ('# employee-form'); employeeModal.modal ('hide'); EMPLOYEE.create (form.find ('[name = primer nombre] '). val (), form.find (' [nombre = apellido] '). val (), form.find (' [nombre = rol] '). val ()); form.find (' entrada ') .val ("););

Obtenemos el formulario, y luego ocultamos la ventana modal. Entonces, vamos a llamar a un EMPLEADO.crear Método, pasando el nombre, el apellido y el rol como los tres parámetros. Finalmente, se borra el formulario..

amplificar. publicar

Pero espera, dices, ¿qué? EMPLEADO.crear? Bueno, es una micro clase? que he puesto en js / employee.js. Echale un vistazo:

var EMPLOYEE = create: function (firstName, lastName, role) var employee = firstName: firstName, lastName: lastName, role: role, dateEmployed: new Date (); amplify.publish ('empleado-creado', empleado); empleado de retorno ;

Usted querrá lanzar una etiqueta de script para arriba con los demás.

Bastante simple, ¿verdad? Simplemente creamos un objeto literal con nuestros parámetros y agregamos un Fecha de Empleo propiedad. Pero, entonces, ¡y finalmente! Tenemos la primera entrada del framework AmplifyJS. Aquí, estamos usando el componente pub / sub events. Esto es ideal para hacer acoplamientos sueltos entre partes de su aplicación..

Este método no tiene que saber si otra parte de nuestro código quiere hacer algo con cada nuevo empleado que creamos; ¿Nuestro? ¿Añadir? botón de controlador de eventos no tiene que preocuparse por ello. Solo lo publicaremos como? Creado por los empleados? Evento para cualquier parte que este interesado en tomar. Pasamos nuestro nuevo objeto de empleado como datos para cualquier persona interesada. Luego, devolvemos el objeto de empleado (aunque no lo seguimos en nuestro controlador de eventos).


Paso 3: Reaccionando con amplificar. suscribirse

Asi que, es ¿Alguna otra parte de nuestra aplicación interesada en el? creado por los empleados? Sí, de hecho. Queremos hacer dos cosas. Primero, agregue este empleado a una tabla en nuestra página. Segundo, queremos almacenar al empleado en localStorage. Aquí está la primera parte de eso:

 amplify.subscribe ('empleado-creado', función (employee) employeeTable.add ([employee.firstName, employee.lastName, employee.role, employee.dateEmployed]); newAlert ('success', 'New Employee Added') ;);

Para suscribirse a un evento, llamamos amplificar. suscribirse. Queremos suscribirnos a los "empleados creados"; cuando ocurran esos eventos, queremos agregarlo a la tabla de empleados; Observe que en lugar de simplemente pasarlo empleado objeto, nos convertimos? a una matriz Esto se debe a que debemos estar seguros de que los elementos estarán en el orden correcto. Luego, queremos mostrar un mensaje, informando a nuestro usuario que el empleado fue agregado exitosamente.

Que pasa con esto tabla de empleados ¿variable? Bueno, primero, tenemos que añadir el

a nuestro documento. Entonces, debajo de nuestros empleados.?

, Agrega esto:

Nombre de pila Apellido Papel Fecha de Empleo

Ahora, tenemos que capturar esta tabla como una variable arriba en nuestra var declaración en la parte superior:

employeeTable = TABLE.create ($ ('# employee-table')),

Y MESA? Esa es la última pieza de JS para este rompecabezas. Pon esto en js / table.js y no olvides la etiqueta de script:

var TABLE = proto: init: function (el) this.element = $ (el) .find ('tbody'); , agregue: function (arr) var row = $ ('') .html (function () return $ .map (arr, function (value) return''+ valor +''; ). join (");); this.element.append (row);, load: function (rows, order) for (var i = 0; rows [i]; i ++) this.add ( filas [i]); var campos = []; para (var j = 0; orden [j]; j ++) fields.push (filas [i] [orden [j]]); this.add (campos );, clear: function () this.element.empty ();, create: function (el) var table = Object.create (this.proto); table.init (el); return table; ;

Es un poco complicado, pero no deberías tener ningún problema en asimilarlo. Tenemos un proto Propiedad que es el prototipo para nuestras instancias de tabla. Entonces, cuando llamamos crear, usamos Object.create para crear un objeto que hereda de esto.proto. Después de eso, llamamos al en eso Método para establecer cualquier propiedad. Finalmente, devolvemos la instancia de tabla..

Esta micro-API nos facilita trabajar con nuestra mesa. Deberías poder ver cómo pasar una matriz a la añadir Método añadirá una fila a nuestra tabla. Tenga en cuenta también que podemos pasar una matriz de filas a carga y llenar la tabla; usaremos esto pronto.

Oh, entonces está la nuevoAlert método que llamamos:

función newAlert (tipo, mensaje) $ ('# alert-area'). append ($ ('

'+ mensaje +'

')); setTimeout (function () $ ('. alert-message'). fadeOut ('slow', function () this.parentNode.removeChild (this););, 2000);

Como puede ver, esto simplemente agrega un div De adentro hacia afuera

; el nuevo div aprovecha el estilo de alerta de Twitter Bootstrap; Después de dos segundos, eliminamos la alerta y la eliminamos..

amplificar.tienda

¿Pero esa no es la única cosa que queremos hacer cuando el? ¿Creado por los empleados? evento ocurre:

employeeStore = amplify.store ('empleados') || [];

En la parte superior, con nuestras otras dos variables, haga la tercera y la final: empleado tienda. Si amplificar.tienda ('empleados') devuelve algo, lo usaremos; De lo contrario, usaremos una matriz vacía..

amplify.subscribe ('creado por el empleado', función (employee) employeeStore.push (empleado); amplify.store ('empleados', employeeStore););

Ahora estamos usando el componente de almacenamiento de AmplifyJS. Realmente no podría ser más simple: almacenar un valor, pasar amplificar.tienda Una clave y el valor. Para recuperar el valor, entrégale la clave. Debajo, AmplifyJS almacena esa clave y valor en cualquier tipo de almacenamiento disponible en ese navegador.

Entonces, aquí agregamos un nuevo empleado a la matriz y almacenamos la matriz en los "empleados". llave. Debo tener en cuenta que dado que estamos almacenando una matriz, AmplifyJS está utilizando la serialización JSON para convertir esa matriz en una cadena. Por lo tanto, si está tratando de admitir navegadores sin soporte nativo de JSON (IE 5 y abajo, Firefox 3 y abajo), querrá incluir la biblioteca json2.js.


Paso 4: Guardar en el servidor (con amplificar.request)

En nuestro pequeño ejemplo de aplicación, estamos diciendo que, de forma predeterminada, los datos que ingresa en la aplicación se guardan solo en su computadora (en ese navegador). Sin embargo, si el usuario lo desea, podemos permitir que lo coloquen en el servidor (hipotéticamente, esta es información privada que tal vez no quieran compartir); sin embargo, si desean acceder a ella desde otros dispositivos, pueden hacerlo. ).

Comenzaremos añadiendo un botón para subir los datos..

Ahora, por supuesto, sus mentes brillantes ya han descubierto que usaremos el componente AJAX de AmplifyJS. amplificar.request es una API increíblemente flexible, y no veremos todo lo que puede hacer. Sin embargo, obtendrá una buena idea de cómo funciona aquí..

Hacer AJAX con AmplifyJS es un poco diferente que con otras bibliotecas: la idea es que primero se defina una conexión al servidor; luego, puedes usar esa conexión varias veces después de eso. Comencemos por definir una conexión, llamada? Recurso? por AmplifyJS:

amplify.request.define ('pushData', 'ajax', url: 'data.php', tipo: 'POST');

El primer parámetro aquí es ID de recurso, que estamos configurando como? pushData ?; Así es como nos referiremos a nuestra conexión cuando la estemos usando. El segundo parámetro es el tipo de solicitud; en este caso, ajax. Este es el único tipo de solicitud integrado en AmplifyJS; Puedes agregar el tuyo, pero esto es adecuado para nuestras necesidades de hoy..

Finalmente, tenemos un objeto de opciones. Según la documentación, sus opciones de configuración son cualquier cosa que usted establezca en jQuery.ajax, tanto como cache (que le permite configurar una memoria caché personalizada) y descifrador (Para analizar la respuesta AJAX). En nuestro caso, solo son necesarias dos opciones: la url, y el tipo de solicitud que estamos haciendo.

Por supuesto, necesitaremos un PHP simple en el back-end; Asegúrate que datos la carpeta es de escritura.

data.php

 

Ahora, ¿qué hay de usar la conexión, el recurso, que hemos definido? Bueno, vamos a hacer esto en un controlador de clic para eso