Bouw een Contacts Manager op met Backbone.js Deel 4

In deel vier van deze serie hebben we gezien hoe gemakkelijk het is om modellen uit onze verzameling toe te voegen en te verwijderen en de pagina gesynchroniseerd met de wijzigingen bij te houden. In dit deel gaan we kijken naar het bewerken van bestaande modelgegevens.


Ermee beginnen

We beginnen met het toevoegen van een andere eenvoudige knop aan de sjabloon, die het bewerken van de gegevens mogelijk maakt:

Terwijl we deze knop aan onze bestaande sjabloon toevoegen, kunnen we ook een geheel nieuwe sjabloon toevoegen die kan worden gebruikt om een ​​bewerkbare vorm weer te geven waarin de modelgegevens kunnen worden gewijzigd. Het lijkt sterk op de exiting-sjabloon en kan na de bestaande sjabloon aan de pagina worden toegevoegd:

De nieuwe sjabloon bestaat voornamelijk uit elementen die de bewerkbare gegevens blootleggen. We hoeven ons geen zorgen te maken over labels voor de elementen, maar gebruiken in plaats daarvan de gegevens uit het model als de standaardwaarden van elke invoer. Merk op dat we een verborgen formulierveld gebruiken om de type attribuut van het model, gebruiken we dit om de waarde van a in te stellen element met behulp van de createSelect () methode van onze hoofdweergave, die als u zich herinnert van het laatste deel in deze tutorial een a terugzendt element om het bestaande type contact te tonen dat wordt bewerkt, stellen we de waarde ervan in op de waarde van het verborgene we hebben toegevoegd in onze sjabloon. Vervolgens voegen we de nieuwe in voor de naam van het contact. Het nieuwe selectie-element wordt toegevoegd als een eigenschap van de view-instantie, zodat we er gemakkelijk mee kunnen werken.

Zodra we het hebben toegevoegd doos met een standaard element:

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

Wanneer de element om het te vervangen. Vervolgens voegen we het nieuwe element in met behulp van jQuery's InsertAfter () methode en focus het klaar voor tekstinvoer.


Het model bijwerken

Vervolgens kunnen we de handler toevoegen die de wijzigingen in het bewerkingsformulier doorvoert en de gegevens in het model bijwerkt. Voeg de toe saveEdits () methode direct na de bewerk contact() methode die we zojuist hebben toegevoegd:

saveEdits: functie (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 ( "klasse")] = el.val ();); if (formData.photo === "") delete formData.photo;  this.model.set (formData); this.render (); if (prev.photo === "/img/placeholder.png") delete vorige foto;  _.each (contacten, functie (contact) if (_.isEqual (contact, vorige)) contacts.splice (_. indexOf (contacten, contactpersoon), 1, formData);); ,

Allereerst maken we een leeg element om de gegevens op te slaan die in het formulier zijn ingevoerd en om ook een kopie van de gegevens op te slaan previousAttributes van het model dat hoort bij de weergave waarmee we werken. De previousAttributes eigenschap van modellen is een gegevensopslag die Backbone voor ons onderhoudt, zodat we eenvoudig kunnen zien wat de vorige attribuutgegevens van een kenmerk waren..

Vervolgens krijgen we elk invoerelement uit het formulier met een combinatie van jQuery's vind() methode en de :invoer filter, die ons alle formuliervelden geeft. We willen niet annuleren of opslaan