Construir un administrador de contactos usando Backbone.js Parte 3

Bienvenido a la tercera parte de nuestra serie que se centra en la creación de aplicaciones utilizando Backbone. Si no ha leído las partes uno y dos, le recomiendo que lo haga, solo para que sepa dónde estamos y qué hemos cubierto hasta ahora..

En la primera parte, tomamos un aspecto básico y modelos, vistas y colecciones. En la segunda parte, analizamos los enrutadores, los eventos y los módulos de historial. En esta parte, analizaremos las interacciones y veremos cómo podemos agregar o eliminar modelos de una colección..


Agregando modelos a una colección

Si vuelve a concentrarse en la primera parte, recordará cómo agregamos todos nuestros modelos a la colección cuando se inició la colección. Pero, ¿cómo podemos agregar modelos individuales a una colección después de que la colección ya se haya inicializado? En realidad es muy fácil..

Agregaremos la posibilidad de agregar nuevos contactos, lo que implicará una actualización del HTML subyacente y nuestra vista principal. Primero, el HTML; agregue el siguiente marcado al contenedor de contactos:

Este sencillo formulario permitirá a los usuarios agregar un nuevo contacto. El punto principal es que el carné de identidad atributiva de la Los elementos coinciden con los nombres de atributos utilizados por nuestros modelos, lo que facilita la obtención de los datos en el formato que deseamos..

A continuación, podemos agregar un controlador de eventos a nuestra vista maestra para que se puedan recopilar los datos en el formulario; agregue el siguiente código después de la clave existente: par de valores en el eventos objeto:

"haga clic en #add": "addContact"

¡No olvide agregar la coma al final del enlace existente! Esta vez especificamos el hacer clic evento desencadenado por el elemento con una carné de identidad de añadir, cual es el botón en nuestro formulario El manejador que estamos vinculando a este evento es agregar contacto, que podemos añadir a continuación. Agregue el siguiente código después de filterByType () método de la segunda parte:

addContact: function (e) e.preventDefault (); var newModel = ; $ ("# addContact"). children ("input"). each (function (i, el) if ($ (el) .val ()! == "") newModel [el.id] = $ ( el) .val ();); contacts.push (formData); if (_.indexOf (this.getTypes (), formData.type) === -1) this.collection.add (nuevo contacto (formData)); este. $ el.find ("# filter"). find ("select"). remove (). end (). append (this.createSelect ());  else this.collection.add (nuevo contacto (formData)); 

Como se trata de un controlador de eventos, recibirá automáticamente el evento objeto, que podemos utilizar para evitar el comportamiento predeterminado de la

Eso es todo lo que necesitaremos para este ejemplo. La lógica para eliminar un modelo individual se puede agregar a la clase de vista que representa un contacto individual, ya que la instancia de vista se asociará con una instancia de modelo en particular. Necesitaremos agregar un enlace de evento y un controlador de eventos para eliminar el modelo cuando se haga clic en el botón; agrega el siguiente código al final de la ContactView clase:

eventos: "haga clic en button.delete": "deleteContact", deleteContact: function () var removedType = this.model.get ("type"). toLowerCase (); this.model.destroy (); this.remove (); if (_.indexOf (directory.getTypes (), removeType) === -1) directory. $ el.find ("# filter select"). children ("[value = '" + removedType + "']" ).retirar(); 

Usamos el eventos Objeto para especificar nuestro enlace de evento, como lo hicimos antes con nuestra vista maestra. Esta vez estamos escuchando hacer clic eventos desencadenados por un