Construir un administrador de contactos usando Backbone.js Parte 4

En la parte cuatro de esta serie, vimos lo fácil que es agregar y eliminar modelos de nuestra colección y mantener la página actualizada en sincronización con los cambios. En esta parte, veremos cómo editar datos de modelos existentes..


Empezando

Comenzaremos agregando otro botón simple a la plantilla, que permitirá la edición de sus datos:

Como estamos agregando este botón a nuestra plantilla existente, también podemos agregar una plantilla completamente nueva que se puede usar para representar una forma editable en la que se pueden cambiar los datos del modelo. Es muy similar a la plantilla que sale y se puede agregar a la página después de la plantilla existente:

La nueva plantilla consiste principalmente de Elementos que exponen los datos editables. No tenemos que preocuparnos por las etiquetas de los elementos, sino que utilizamos los datos del modelo como valores predeterminados de cada entrada. Tenga en cuenta que estamos utilizando un campo de formulario oculto para almacenar el tipo atributo del modelo, utilizaremos esto para establecer el valor de un elemento usando el createSelect () método de nuestra vista maestra, que si recuerda de la última parte de este tutorial devolverá un elemento para mostrar el tipo existente del contacto que se está editando establecemos su valor en el valor del oculto Añadimos en nuestra plantilla. Luego insertamos el nuevo por el nombre del contacto. El nuevo elemento de selección se agrega como una propiedad de la instancia de vista para que podamos interactuar con él fácilmente.

Una vez que hemos añadido el caja con un estándar elemento:

if (this.select.val () === "addType") this.select.remove (); PS", " class ":" type "). insertAfter (this. $ el.find (". name ")). focus ();

Cuando el Elemento para reemplazarlo. Luego insertamos el nuevo elemento usando jQuery's. insertAfter () Método y enfoque listo para la entrada de texto.


Actualizando el Modelo

A continuación, podemos agregar el controlador que tomará los cambios realizados en el formulario de edición y actualizará los datos en el modelo. Añade el guardar ediciones () método directamente después de la editar contacto() Método que acabamos de añadir:

saveEdits: function (e) e.preventDefault (); var formData = , prev = this.model.previousAttributes (); $ (e.target) .closest ("form"). find (": input"). add (". photo"). each (function () var el = $ (this); formData [el.attr ( "clase")] = el.val ();); if (formData.photo === "") eliminar formData.photo;  this.model.set (formData); this.render (); if (prev.photo === "/img/placeholder.png") eliminar prev.photo;  _.each (contactos, función (contacto) si (_.isEqual (contacto, anterior)) contacts.splice (_. indexOf (contactos, contacto), 1, formData);); ,

En primer lugar, creamos un elemento vacío para almacenar los datos que se han ingresado en el formulario y también almacenamos una copia del anteriorAtributos del modelo que pertenece a la vista con la que estamos trabajando. los anteriorAtributos La propiedad de los modelos es un almacén de datos que Backbone nos mantiene para que podamos ver fácilmente los datos de atributos anteriores de un atributo..

Luego obtenemos cada elemento de entrada del formulario utilizando una combinación de jQuery's encontrar() método y el :entrada Filtro, que nos da todos los campos del formulario. No queremos cancelar ni guardar.