Costruisci un gestore di contatti usando Backbone.js Parte 3

Benvenuti alla terza parte della nostra serie che si concentra sulla creazione di applicazioni utilizzando Backbone. Se non hai letto le parti 1 e 2, ti consiglio vivamente di farlo - solo così sai dove siamo e cosa abbiamo trattato finora.

Nella prima parte, abbiamo preso un aspetto e modelli di base, viste e collezioni. Nella seconda parte, abbiamo esaminato i router, gli eventi e i moduli della storia. In questa parte, esamineremo ulteriormente le interazioni e vediamo come aggiungere o rimuovere modelli da una raccolta.


Aggiunta di modelli a una raccolta

Se ripensi la tua mente alla prima parte, ti ricorderai come abbiamo aggiunto tutti i nostri modelli alla collezione quando la collezione è stata inizializzata. Ma come possiamo aggiungere singoli modelli a una collezione dopo che la collezione è già stata inizializzata? In realtà è davvero facile.

Aggiungeremo la possibilità di aggiungere nuovi contatti che comporteranno un aggiornamento dell'HTML sottostante e della nostra vista principale. Innanzitutto, l'HTML; aggiungi il seguente mark-up al contenitore dei contatti:

Questo semplice modulo consentirà agli utenti di aggiungere un nuovo contatto. Il punto principale è che il id attributore del gli elementi corrispondono ai nomi degli attributi utilizzati dai nostri modelli, il che rende più facile ottenere i dati nel formato che vogliamo.

Successivamente, possiamo aggiungere un gestore di eventi alla nostra vista principale in modo che i dati nel modulo possano essere raccolti; aggiungere il seguente codice dopo la chiave esistente: coppia di valori nel file eventi oggetto:

"fai clic su #add": "addContact"

Non dimenticare di aggiungere la virgola finale alla fine del bind esistente! Questa volta specifichiamo il clic evento innescato dall'elemento con un id di Inserisci, che è il pulsante sul nostro modulo. Il gestore che stiamo vincolando a questo evento è Agg.contatto, che possiamo aggiungere in seguito. Aggiungere il seguente codice dopo il filterByType () metodo dalla seconda parte:

addContact: function (e) e.preventDefault (); var newModel = ; $ ("# addContact"). children ("input"). each (function (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)); questo $ el.find ( "# filtro") trovare ( "select") rimuovere () end () aggiungere (this.createSelect ()).....;  else this.collection.add (new Contact (formData)); 

Poiché questo è un gestore di eventi, riceverà automaticamente il evento oggetto, che possiamo usare per prevenire il comportamento predefinito di

Questo è tutto ciò di cui abbiamo bisogno per questo esempio. La logica per rimuovere un singolo modello può essere aggiunta alla classe vista che rappresenta un singolo contatto, poiché l'istanza della vista sarà associata a una particolare istanza del modello. Dovremo aggiungere un binding di eventi e un gestore di eventi per rimuovere il modello quando si fa clic sul pulsante; aggiungi il seguente codice alla fine del ContactView classe:

eventi: "click 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 select"). children ("[valore = '" + removedType + "']" ).rimuovere(); 

Noi usiamo il eventi oggetto di specificare il nostro binding di eventi, come abbiamo fatto prima con la nostra vista principale. Questa volta stiamo ascoltando clic eventi innescati da a