Costruisci un gestore di contatti usando Backbone.js Parte 4

Nella quarta parte di questa serie, abbiamo visto quanto è facile aggiungere e rimuovere modelli dalla nostra raccolta e mantenere la pagina aggiornata in sincronia con le modifiche. In questa parte, esamineremo la modifica dei dati del modello esistente.


Iniziare

Inizieremo aggiungendo un altro pulsante semplice al modello, che consentirà la modifica dei suoi dati:

Poiché stiamo aggiungendo questo pulsante al nostro modello esistente, possiamo anche aggiungere un modello completamente nuovo che può essere utilizzato per eseguire il rendering di un modulo modificabile in cui è possibile modificare i dati del modello. È molto simile al modello uscente e può essere aggiunto alla pagina dopo il modello esistente:

Il nuovo modello consiste principalmente di elementi che espongono i dati modificabili. Non è necessario preoccuparsi delle etichette per gli elementi, ma utilizzare i dati del modello come valori predefiniti di ciascun input. Si noti che stiamo utilizzando un campo modulo nascosto per archiviare il file genere attributo del modello, lo useremo per impostare il valore di a elemento usando il createSelect () metodo della nostra vista principale, che se richiami dall'ultima parte di questo tutorial restituirà a elemento per mostrare il tipo esistente del contatto che si sta modificando, impostiamo il suo valore sul valore del nascosto abbiamo aggiunto nel nostro modello. Inseriamo quindi il nuovo per il nome del contatto. Il nuovo elemento select viene aggiunto come proprietà dell'istanza della vista in modo da poter interagire facilmente con esso.

Una volta aggiunto il scatola con uno standard elemento:

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

Quando il elemento per sostituirlo. Quindi inseriamo il nuovo elemento usando jQuery InsertAfter () metodo e concentrarlo pronto per l'immissione di testo.


Aggiornamento del modello

Successivamente possiamo aggiungere il gestore che prenderà le modifiche apportate nel modulo di modifica e aggiornerà i dati nel modello. Aggiungi il saveEdits () metodo direttamente dopo il Modifica il contatto() metodo che abbiamo appena aggiunto:

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 ( "class")] = el.val ();); if (formData.photo === "") delete formData.photo;  this.model.set (formData); this.render (); if (prev.photo === "/img/placeholder.png") elimina prev.photo;  _.each (contatti, funzione (contatto) if (_.isEqual (contact, prev)) contacts.splice (_. indexOf (contatti, contatto), 1, formData);); ,

Prima di tutto, creiamo un elemento vuoto per archiviare i dati che sono stati inseriti nel modulo e memorizziamo anche una copia del file previousAttributes del modello che appartiene alla vista con cui stiamo lavorando. Il previousAttributes la proprietà dei modelli è un archivio dati che Backbone mantiene per noi in modo da poter vedere facilmente quali erano i dati degli attributi precedenti di un attributo.

Quindi riceviamo ciascun elemento di input dal modulo utilizzando una combinazione di jQuery trova() metodo e il :ingresso filtro, che ci fornisce tutti i campi del modulo. Non vogliamo l'annullamento o il salvataggio