Construiți un manager de contacte utilizând Backbone.js Partea 3

Bine ați venit în partea a treia a seriei noastre, care se concentrează pe construirea de aplicații utilizând Backbone. Dacă nu ați citit părțile unu și doi, vă recomand că vă recomandăm să faceți acest lucru - doar pentru a afla unde ne aflăm și ce am acoperit până acum.

În prima parte, am luat un aspect de bază și modele, opinii și colecții. În partea a doua, am analizat routerele, evenimentele și modulele de istorie. În această parte, vom examina mai departe interacțiunile și vom vedea cum putem adăuga sau elimina modele dintr-o colecție.


Adăugarea de modele la o colecție

Dacă vă aduceți mintea înapoi în prima parte, vă veți aminti modul în care am adăugat toate modelele noastre colecției când a fost inițializată colecția. Dar cum putem adăuga modele individuale într-o colecție după ce colecția a fost deja inițializată? De fapt este foarte ușor.

Vom adăuga posibilitatea adăugării de contacte noi, care vor implica o actualizare a codului HTML și a vederii noastre principale. Mai întâi, codul HTML; adăugați următoarea notă la containerul de contacte:

Acest formular simplu va permite utilizatorilor să adauge un nou contact. Principalul punct este acela că id attributess DIRECTIVEI elementele se potrivesc cu numele de atribute utilizate de modelele noastre, ceea ce face mai ușor obținerea datelor în formatul dorit.

Apoi, putem adăuga un manipulator de evenimente la vizualizarea noastră master, astfel încât datele din formular să poată fi recoltate; adăugați următorul cod după cheia existentă: pereche de valori din evenimente obiect:

"faceți clic pe #add": "addContact"

Nu uitați să adăugați virgula din capăt la sfârșitul legării existente! De data aceasta specificăm clic eveniment declanșat de element cu un id de adăuga, care este butonul din formularul nostru. Operatorul care ne obligă la acest eveniment este adaugă contact, pe care îl putem adăuga în continuare. Adăugați următorul cod după filterByType () din partea a doua:

addContact: funcția (e) e.preventDefault (); var newModel = ; $ (el ()) (val)) == "()) newModel [el.id] = $ (" el) .val ();); contacts.push (formData); dacă (_.indexOf (this.getTypes (), formData.type) === -1) this.collection.add (contact nou (formData)); acest $ el.find ( "# filtru") găsește ( "selectați") șterge () de capăt () adăugați (this.createSelect ()).....;  altceva this.collection.add (nou contact (formData)); 

Deoarece acesta este un handler de evenimente, acesta va primi automat eveniment obiect, pe care îl putem folosi pentru a preveni comportamentul implicit al

Asta e tot ce vom avea nevoie pentru acest exemplu. Logica pentru a elimina un model individual poate fi adăugată la clasa de vizualizare care reprezintă un contact individual, deoarece instanța de vizualizare va fi asociată cu o anumită instanță de model. Va trebui să adăugăm un eveniment obligatoriu și un manipulator de evenimente pentru a elimina modelul când se face clic pe buton; adăugați următorul cod la sfârșitul secțiunii ContactView clasă:

evenimente: "click button.delete": "deleteContact", deleteContact: functie () var removedType = this.model.get ("type") laLowerCase (); this.model.destroy (); this.remove (); dacă (_.indexOf (director.getTypes (), removedType) === -1) directorul $ el.find ("# selectare filtru") copii ("[value = '" + removedType + ).elimina(); 

Noi folosim evenimente obiect pentru a specifica obligativitatea evenimentului nostru, așa cum am făcut înainte cu viziunea noastră principală. De data aceasta ascultăm clic evenimente declanșate de a