Bouw een Contacts Manager op met Backbone.js Deel 3

Welkom bij deel drie van onze serie die zich richt op het bouwen van applicaties met behulp van Backbone. Als je delen één en twee niet hebt gelezen, raad ik je ten zeerste aan om dat te doen - zodat je weet waar we nu zijn en wat we tot nu toe hebben behandeld.

In deel één hebben we een basislook en -modellen, weergaven en collecties gemaakt. In deel twee hebben we gekeken naar routers, evenementen en de history-modules. In dit deel gaan we verder kijken naar interacties en kijken we hoe we modellen uit een verzameling kunnen toevoegen of verwijderen.


Modellen aan een verzameling toevoegen

Als je terugdenkt aan deel een, weet je nog hoe we al onze modellen aan de verzameling hebben toegevoegd toen de verzameling werd geïnitialiseerd. Maar hoe kunnen we afzonderlijke modellen toevoegen aan een verzameling nadat de verzameling al is geïnitialiseerd? Het is eigenlijk heel gemakkelijk.

We voegen de mogelijkheid toe om nieuwe contacten toe te voegen die een update van de onderliggende HTML en onze hoofdweergave met zich meebrengen. Ten eerste de HTML; voeg de volgende markering toe aan de contactcontainer:

Met dit eenvoudige formulier kunnen gebruikers een nieuw contact toevoegen. Het belangrijkste punt is dat de ID kaart attributess van de elementen komen overeen met de kenmerknamen die door onze modellen worden gebruikt, waardoor het gemakkelijker wordt om de gegevens in de gewenste indeling te krijgen.

Vervolgens kunnen we een gebeurtenishandler toevoegen aan onze hoofdweergave, zodat de gegevens in het formulier kunnen worden geoogst; voeg de volgende code toe na de bestaande sleutel: waardepaar in de events voorwerp:

"klik #add": "addContact"

Vergeet niet om de achterliggende komma toe te voegen aan het einde van de bestaande binding! Deze keer specificeren we de Klik gebeurtenis geactiveerd door het element met een ID kaart van toevoegen, welke is de knop op ons formulier. De handler die we binden aan deze gebeurtenis is Cont.persToev, welke we vervolgens kunnen toevoegen. Voeg de volgende code toe na de filterByType () methode van deel twee:

addContact: function (e) e.preventDefault (); var newModel = ; $ ("# addContact"). children ("input"). each (functie (i, el) if ($ (el) .val ()! == "") newModel [el.id] = $ ( el) .val ();); contacts.push (formdata); if (_.indexOf (this.getTypes (), formData.type) === -1) this.collection.add (new Contact (formData)); dit $ el.find ( "# filter") te vinden ( "select") Verwijderen () end () toevoegen (this.createSelect ()).....;  else this.collection.add (nieuw Contact (formData)); 

Omdat dit een gebeurtenishandler is, ontvangt deze automatisch de evenement object, die we kunnen gebruiken om het standaardgedrag van de

Dat is alles wat we nodig hebben voor dit voorbeeld. De logica om een ​​afzonderlijk model te verwijderen, kan worden toegevoegd aan de weergaveklasse die een afzonderlijk contact vertegenwoordigt, omdat de view-instantie aan een bepaald modelexemplaar wordt gekoppeld. We moeten een gebeurtenisbinding en een gebeurtenishandler toevoegen om het model te verwijderen wanneer op de knop wordt geklikt; voeg de volgende code toe aan het einde van de ContactView klasse:

evenementen: "klik button.delete": "deleteContact", deleteContact: function () var removedType = this.model.get ("type"). toLowerCase (); this.model.destroy (); this.remove (); if (_.indexOf (directory.getTypes (), removedType) === -1) directory. $ el.find ("# filter selecteren"). children ("[value = '" + removedType + "']" ).verwijderen(); 

Wij gebruiken de events object om onze gebeurtenisbinding te specificeren, zoals we eerder deden met onze hoofdweergave. Deze keer luisteren we naar Klik evenementen geactiveerd door een