Construire un gestionnaire de contacts en utilisant Backbone.js Partie 4

Dans la quatrième partie de cette série, nous avons constaté à quel point il est facile d’ajouter et de supprimer des modèles de notre collection et de maintenir la page à jour en phase avec les modifications. Dans cette partie, nous allons examiner la modification des données de modèle existantes..


Commencer

Nous allons commencer par ajouter un autre bouton simple au modèle, ce qui permettra la modification de ses données:

Au fur et à mesure que nous ajoutons ce bouton à notre modèle existant, nous pouvons également ajouter un tout nouveau modèle pouvant être utilisé pour afficher un formulaire modifiable dans lequel les données du modèle peuvent être modifiées. Il ressemble beaucoup au modèle existant et peut être ajouté à la page après le modèle existant:

Le nouveau modèle consiste principalement en éléments qui exposent les données modifiables. Nous n'avons pas à nous soucier des étiquettes pour les éléments, mais nous utilisons plutôt les données du modèle comme valeurs par défaut de chaque entrée. Notez que nous utilisons un champ de formulaire masqué pour stocker le type attribut du modèle, nous allons l'utiliser pour définir la valeur d'un élément utilisant le createSelect () méthode de notre vue principale, qui, si vous vous rappelez de la dernière partie de ce didacticiel, renverra un élément pour afficher le type existant du contact en cours de modification, nous lui affectons la valeur du caractère caché nous avons ajouté dans notre modèle. Nous insérons ensuite le nouveau pour le nom du contact. Le nouvel élément select est ajouté en tant que propriété de l'instance de vue afin que nous puissions interagir facilement avec celui-ci..

Une fois que nous avons ajouté le boîte avec un standard élément:

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

Quand le élément pour le remplacer. Nous insérons ensuite le nouvel élément en utilisant jQuery insertAfter () méthode et focus prêt pour la saisie de texte.


Mise à jour du modèle

Ensuite, nous pouvons ajouter le gestionnaire qui prendra les modifications apportées dans le formulaire de modification et mettra à jour les données du modèle. Ajouter le saveEdits () méthode directement après la Modifier le contact() méthode que nous venons d'ajouter:

saveEdits: function (e) e.preventDefault (); var formData = , prev = this.model.previousAttributes (); $ (e.target) .closest ("form"). find (": input"). add (". photo"). each (function () var = $ (this); formData [el.attr ( "classe")] = el.val ();); if (formData.photo === "") delete formData.photo;  this.model.set (formData); this.render (); if (prev.photo === "/img/placeholder.png") delete prev.photo;  _.each (contacts, fonction (contact) if (_.isEqual (contact, précédent)) contacts.splice (_. indexOf (contacts, contact), 1, formData);); ,

Tout d’abord, nous créons un élément vide pour stocker les données saisies dans le formulaire, ainsi qu’une copie du précédentAttributs du modèle qui appartient à la vue avec laquelle nous travaillons. le précédentAttributs La propriété de modèles est un magasin de données que Backbone gère pour nous afin que nous puissions facilement voir en quoi consistaient les données d'attribut précédentes d'un attribut..

Nous obtenons ensuite chaque élément d’entrée du formulaire en utilisant une combinaison de celle de jQuery trouver() méthode et la :contribution filtre, qui nous donne tous les champs de formulaire. Nous ne voulons pas l'annulation ou la sauvegarde