Esta es la parte final de un tutorial de tres partes que le enseñará cómo crear una aplicación de administrador de contactos en JavaScript, utilizando CanJS y jQuery. Cuando haya terminado con este tutorial, tendrá todo lo que necesita para crear sus propias aplicaciones de JavaScript utilizando CanJS!
En la segunda parte, creó las vistas y los controles necesarios para mostrar las categorías, creó los ayudantes Model.List, usó el enrutamiento para filtrar los contactos y modificó su EJS para aprovechar el enlace en vivo.
En esta parte del tutorial, usted:
Contacto
ControlarSe agregarán a los archivos de origen de la parte uno y dos, así que si aún no lo ha hecho, póngase al día leyendo la parte uno y dos..
En la primera parte, contactView.ejs
Coloca cada propiedad de un contacto en una etiqueta de entrada. Para actualizar un contacto cuando cambien estas entradas, deberá agregar algunos controladores de eventos a la Contacto
Controlar. Agregar este codigo contactos.js
dentro de Contactos
Controlar:
'.contact input focusout': function (el, ev) this.updateContact (el); , '.contact input keyup': function (el, ev) if (ev.keyCode == 13) el.trigger ('blur'), '.contact select change': function (el, ev) this.updateContact (el), updateContact: function (el) var contact = el.closest ('. contact'). data ('contact'); contact.attr (el.attr ('nombre'), el.val ()). save ();
Revisemos este código línea por línea y veamos cómo funciona:
'.contact input focusout': function (el, ev) this.updateContact (el); ,
Llamadas updateContact ()
cuando alguno pierde el foco.
'.contact input keyup': function (el, ev) if (ev.keyCode == 13) el.trigger ('blur')
Desencadena el difuminar
evento en un si se presiona la tecla enter mientras tiene foco. Esto hará que la entrada pierda el foco, que es manejado por el
enfoque
controlador de eventos.
'.contact select change': function (el, ev) this.updateContact (el),
Llamadas updateContact ()
cuando el valor de la cambios.
var contact = el.closest ('. contact'). data ('contact');
Encuentra lo mas cercano etiqueta principal y recupera la instancia del modelo utilizando
$ .data ()
.
contact.attr (el.attr ('nombre'), el.val ()). save ();
Actualiza el contacto usando attr ()
. El nombre de cada uno coincide con una propiedad de contacto, por lo que
el.attr ('nombre')
devolverá el nombre de la propiedad que se está actualizando. salvar()
se utiliza para guardar el cambio en el Contacto
Modelo.
Hay un pequeño enlace con una 'X' en la esquina superior derecha de cada contacto. Cuando se hace clic en este, el contacto debe ser eliminado. Para hacer esto, agregue otro controlador de eventos a la Contactos
control que se ve así:
'.remove click': function (el, ev) el.closest ('. contact'). data ('contact'). destroy ();
Cuando el X
se hace clic, la instancia de contacto se recupera de la más cercana y
destruir()
se llama. destruir()
elimina el contacto del modelo y lo elimina de cualquier modelo. Listas.
Live Binding actualizará automáticamente su interfaz de usuario cuando se elimine un contacto..
Ahora creará el Control y la Vista necesarios para crear un contacto. Primero necesitarás un botón gigante de "Nuevo Contacto". Añadir este código a También deberá crear una nueva Vista que mostrará un formulario para crear un contacto. Guarde este código como Esta vista hace que el Ahora necesitarás crear un nuevo control llamado Revisemos este Control en detalle para ver qué está pasando: Crea un contacto vacío utilizando Desliza el formulario fuera de la vista. Llamadas Llamada Llamadas Encuentra el Si el nombre del contacto no está vacío, Los controles también admiten controladores de eventos con plantillas que le permiten personalizar un controlador de eventos y escuchar eventos en objetos distintos a Puedes personalizar el comportamiento del manejador usando Los controles también pueden vincularse a objetos distintos de Estos manejadores se limpiarán cuando se destruya la instancia de Control. Esto es fundamental para evitar las pérdidas de memoria que son comunes en las aplicaciones JavaScript.. Deberá usar un controlador de eventos con plantilla para mostrar el formulario cuando se haga clic en el botón "Nuevo contacto". Agregue este controlador de eventos a la El botón "Nuevo contacto" está fuera de la Al igual que los otros controles en su aplicación, deberá crear una nueva instancia de Con este cambio, una instancia de la Cuando se crea un nuevo contacto, el Esto se une a la El enlace en vivo actualizará la UI de sus aplicaciones automáticamente cuando se agregue el contacto a Eso es todo para la parte final de este tutorial. En la tercera parte usted: Este es el final del tutorial del administrador de contactos de CanJS. Aquí hay un resumen de lo que se cubrió en este tutorial de tres partes: Ahora tiene todo lo que necesita para crear aplicaciones JavaScript utilizando CanJS. Ve a construir algo impresionante. Para obtener documentación completa y más aplicaciones de ejemplo, visite CanJS. Gracias por leer!index.html
justo encima Nuevo contacto
createView.ejs
en su carpeta de vistas:
contactView.ejs
sub-plantilla y agrega "Guardar" y "Cancelar" botones. Esto es lo que parece en la aplicación:Crear
que mostrará el formulario y guardará el nuevo contacto en el Contacto
Modelo. Añadir este código a contactos.js
: Create = can.Control (show: function () this.contact = new Contact (); this.element.html (can.view ('views / createView.ejs', contact: this.contact, categorías: this .options.categories)); this.element.slideDown (200);, hide: function () this.element.slideUp (200);, '.contact input keyup': function (el, ev) if (ev.keyCode == 13) this.createContact (el);, '.save click': function (el) this.createContact (el), '.cancel click': function () this .hide ();, createContact: function () var form = this.element.find ('form'); values = can.deparam (form.serialize ()); if (values.name! == "" ) this.contact.attr (valores) .save (); this.hide (););
show: function () this.contact = new Contact (); this.element.html (can.view ('views / createView.ejs', contact: this.contact, categorías: this.options.categories)); this.element.slideDown (200); ,
nuevo contacto()
y lo asigna a esto.contacto
. El nuevo contacto se pasa a puedo ver()
junto con las categorías a ser prestadas. hide: function () this.element.slideUp (200); ,
'.contact input keyup': function (el, ev) if (ev.keyCode == 13) this.createContact (el);
crear contacto()
Si se presiona la tecla Enter mientras está en una de las entradas. '.save click': function (el) this.createContact (el),
crear contacto()
cuando se hace clic en el botón "Guardar". '.cancel click': function () this.hide (); ,
esconder()
cuando se hace clic en el botón "Cancelar". var form = this.element.find ('form'); valores = can.deparam (form.serialize ());
elemento y utiliza jQuery
publicar por fascículos()
función para obtener una cadena que representa todos los valores del formulario. Entonces la cadena serializada se convierte en un objeto usando can.deparam ()
. if (values.name! == "") this.contact.attr (valores) .save (); this.hide ();
attr ()
se utiliza para actualizar el contacto almacenado en esto.contacto
. salvar()
se llama para guardar los cambios en el modelo y el formulario se oculta llamando esconder()
.
Uso de controladores de eventos con plantilla
este.elemento
.NOMBRE
en el controlador de eventos. La variable dentro de las llaves se mira hacia arriba en el Control esta.opciones
primero, y luego el ventana
. Puede crear varias instancias del mismo Control pero personalizar el comportamiento de sus controladores de eventos en cada instancia.este.elemento
utilizando controladores de eventos con plantillas. Si la variable dentro NOMBRE
es un objeto, Control se unirá a ese objeto para escuchar eventos. El objeto no tiene que ser un elemento DOM, puede ser cualquier objeto como un Modelo. Para escuchar un clic en cualquier parte de una página que utilizarías: 'documento clic'
. como su controlador de eventos.
Mostrando el formulario
Crear
Control en contactos.js
: 'document # new-contact click': function () this.show ();
Crear
Elemento de control, por lo que 'documento # nuevo contacto'
Se utiliza como selector para el botón. Cuando se hace clic, el formulario se deslizará hacia abajo a la vista.
Inicializando el Control de Crear
Crear
Controlar. Actualice su función de documento listo en contactos.js
para parecerse a esto: $ (document) .ready (function () $ .when (Category.findAll (), Contact.findAll ()). then (function (categoryResponse, contactResponse) var categories = categoryResponse [0], contacts = contactResponse [0 ]; nuevo Crear ('# crear', categorías: categorías); nuevos Contactos ('# contactos', contactos: contactos, categorías: categorías); nuevo Filtro ('# filtro', contactos: contactos, categorías : categorías););)
Crear
El control se creará en el #crear
elemento. Se pasará la lista de categorías..
Reaccionando a un nuevo contacto
Modelo.Lista
almacenado en el Contactos
El control necesita ser actualizado. Haces esto usando controladores de eventos con plantillas. Agregue este controlador de eventos a la Contactos
Control en contactos.js
: 'Contact created': function (list, ev, contact) this.options.contacts.push (contact);
creado
evento de la Contacto
Modelo. El nuevo contacto se añade a la Modelo.Lista
almacenado en el Contactos
Control usando empujar()
.
esta.opciones.contactos
.Terminando