Construire un gestionnaire de contacts à l'aide de Backbone.js Partie 3

Bienvenue dans la troisième partie de notre série consacrée à la création d’applications à l’aide de Backbone. Si vous n'avez pas lu les parties un et deux, je vous recommande fortement de le faire - juste pour que vous sachiez où nous en sommes et ce que nous avons couvert jusqu'à présent..

Dans la première partie, nous avons pris un aperçu de base et des modèles, des vues et des collections. Dans la deuxième partie, nous avons examiné les routeurs, les événements et les modules d’historique. Dans cette partie, nous allons examiner plus en détail les interactions et voir comment ajouter ou supprimer des modèles d’une collection..


Ajout de modèles à une collection

Si vous revenez à la première partie, vous vous rappellerez comment nous avons ajouté tous nos modèles à la collection lors de son initialisation. Mais comment pouvons-nous ajouter des modèles individuels à une collection après l’initialisation de la collection? C'est vraiment très facile.

Nous ajouterons la possibilité d'ajouter de nouveaux contacts, ce qui impliquera une mise à jour du code HTML sous-jacent et de notre vue principale. Tout d'abord, le HTML; ajoutez le balisage suivant au conteneur de contacts:

Ce formulaire simple permettra aux utilisateurs d'ajouter un nouveau contact. Le point principal est que le identifiant attribut du les éléments correspondent aux noms d'attributs utilisés par nos modèles, ce qui permet d'obtenir plus facilement les données au format souhaité.

Ensuite, nous pouvons ajouter un gestionnaire d'événements à notre vue principale afin que les données du formulaire puissent être collectées. ajoutez le code suivant après la clé existante: paire de valeurs dans le événements objet:

"click #add": "addContact"

N'oubliez pas d'ajouter la virgule de fin à la fin de la reliure existante! Cette fois nous spécifions le Cliquez sur événement déclenché par l'élément avec un identifiant de ajouter, qui est le bouton sur notre formulaire. Le gestionnaire que nous lions à cet événement est ajouter le contact, que nous pouvons ajouter ensuite. Ajoutez le code suivant après le filterByType () méthode de la deuxième partie:

addContact: function (e) e.preventDefault (); var newModel = ; $ ("# addContact"). enfants ("entrée"). each (fonction (i, el) if ($ (el) .val ()! == "") newModel [el.id] = $ ( el) .val ();); contacts.push (formData); if (_.indexOf (this.getTypes (), formData.type) === -1) this.collection.add (nouveau contact (formData)); this. $ el.find ("# filtre"). find ("select"). remove (). end (). append (this.createSelect ());  else this.collection.add (nouveau contact (formData)); 

Comme il s’agit d’un gestionnaire d’événements, il recevra automatiquement le message. un événement objet, que nous pouvons utiliser pour empêcher le comportement par défaut du

C'est tout ce dont nous avons besoin pour cet exemple. La logique permettant de supprimer un modèle individuel peut être ajoutée à la classe de vue qui représente un contact individuel, car l'instance de vue sera associée à une instance de modèle particulière. Nous devrons ajouter une liaison d'événement et un gestionnaire d'événements pour supprimer le modèle lorsque l'utilisateur clique sur le bouton. ajoutez le code suivant à la fin de la ContactVue classe:

events: "click button.delete": "deleteContact", deleteContact: function () var removeType = this.model.get ("type"). toLowerCase (); this.model.destroy (); this.remove (); if (_.indexOf (directory.getTypes (), removedType) === -1) répertoire. $ el.find ("# filtre select"). children ("[valeur = '" + supprimeType + "']" ).retirer(); 

Nous utilisons le événements object pour spécifier notre liaison d’événement, comme nous l’avions fait auparavant avec notre vue principale. Cette fois, nous écoutons Cliquez sur événements déclenchés par un