In questo tutorial, cercheremo di creare un gestore di contatti completamente funzionale utilizzando Backbone.js, Underscore.js e jQuery. Daremo un'occhiata ai componenti di base che rendono spunta Backbone e ad alcuni dei metodi di convenienza esposti da Underscore.
Backbone è una struttura architettonica che ci consente di creare facilmente applicazioni JavaScript non banali mediante l'organizzazione e la struttura in stile MVC. Backbone non è considerato vero MVC - C è per Collection non Controller, ma offre ancora molti degli stessi vantaggi e ci consente di scrivere codice potente ma mantenibile.
Underscore è una libreria di utilità che fornisce funzionalità avanzate a JavaScript, aggiungendo funzioni aggiuntive per lavorare con array, collezioni, funzioni e oggetti.
Sono sicuro che jQuery non ha bisogno di presentazioni qui.
Avremo bisogno di una cartella del progetto root contenente css
, img
e js
sottocartelle, quindi vai avanti e creale ora. Iniziamo con la seguente pagina HTML:
Backbone.js Web App
Salva questo come index.html
nella cartella del progetto root. L'unico requisito obbligatorio di Backbone è Underscore.js, ma vogliamo anche utilizzare jQuery per collegarci a queste due librerie prima di Backbone. Il codice dell'applicazione verrà inserito app.js
e tutti gli stili andranno in screen.css
. Nella pagina, abbiamo un contenitore vuoto che costituirà la base della nostra applicazione.
Successivamente possiamo creare il file JavaScript scheletrico che gradualmente riempiremo nel corso di questa serie. In un nuovo file aggiungi il seguente codice:
(function ($) var contacts = [name: "Contact 1", indirizzo: "1, una strada, una città, una città, AB12 3CD", tel: "0123456789", email: "[email protected] ", digitare:" famiglia ", nome:" Contatto 2 ", indirizzo:" 1, una strada, una città, una città, AB12 3CD ", tel:" 0123456789 ", email:" [email protected] " , digitare: "famiglia", nome: "Contatto 3", indirizzo: "1, una strada, una città, una città, AB12 3CD", tel: "0123456789", email: "[email protected]", digitare: "amico", nome: "Contatto 4", indirizzo: "1, una strada, una città, una città, AB12 3CD", tel: "0123456789", email: "[email protected]", tipo : "collega", nome: "Contatto 5", indirizzo: "1, una strada, una città, una città, AB12 3CD", tel: "0123456789", email: "[email protected]", digitare: "famiglia", nome: "Contatto 6", indirizzo: "1, una strada, una città, una città, AB12 3CD", tel: "0123456789", email: "[email protected]", digitare: " collega ", nome:" Contatto 7 ", indirizzo:" 1, una strada, una città, una città, AB12 3CD ", tel:" 0123456789 ", email:" [email protected] ", digitare:" amico ", nome:" Contatto 8 ", indirizzo: "1, una strada, una città, una città, AB12 3CD", tel: "0123456789", email: "[email protected]", digitare: "famiglia"]; (jQuery));
Salva questo nel js
cartella come app.js
. Inseriremo tutto il nostro codice in una funzione anonima che invochiamo immediatamente, aliasing jQuery come $
personaggio. Definito anche in questa fase è una matrice di oggetti in cui ogni oggetto rappresenta un contatto.
Utilizzeremo questo archivio dati locale per questa parte del tutorial in quanto ci consente di ottenere alcuni script attivi e funzionanti senza preoccuparci troppo della sincronizzazione con un server. Lo salveremo per un altro giorno!
Un modello rappresenta i dati di un'applicazione; nella nostra applicazione questo sarà un contatto individuale, che avrà attributi come un nome, un numero di contatto, ecc. Si potrebbe dire che un singolo modello rappresenta la parte atomica dell'applicazione - la più piccola unità possibile di funzionalità. Aggiungi il seguente codice direttamente dopo l'array di dati:
var Contact = Backbone.Model.extend (defaults: photo: "/img/placeholder.png");
Per creare un modello in Backbone, estendiamo semplicemente il Backbone.Model
classe usando il estendere()
metodo. Possiamo passare un oggetto nel metodo che ci consente di personalizzare il modello con le nostre funzionalità. Viene chiamata una delle proprietà che possiamo impostare all'interno di questo oggetto default
. Questa proprietà ci consente di configurare i valori predefiniti per qualsiasi attributo che vorremmo avere i nostri modelli.
In questo caso, impostiamo un'immagine segnaposto come valore predefinito di foto
attributo per le istanze del modello. A tutti i modelli che non hanno questo attributo una volta definito, gli verrà dato.
I modelli hanno altre proprietà che possiamo usare per aggiungere funzionalità; potremmo definire un inizializzare()
metodo, e questo metodo sarebbe invocato automaticamente da Backbone per noi quando ogni modello è inizializzato. Al momento non ci serviremo di questo, ma non preoccupatevi, torneremo ai modelli un po 'più avanti.
Una collezione è una classe per la gestione di gruppi di modelli. In questo esempio useremo un esempio semplice per memorizzare tutti i nostri contatti. Aggiungi il seguente codice direttamente dopo il Contatto
modello:
var Directory = Backbone.Collection.extend (model: Contact);
Come un modello, una collezione è una classe Backbone che estendiamo per aggiungere funzionalità personalizzate specifiche per la nostra applicazione. Le collezioni hanno anche un estendere()
metodo, e accetta un oggetto che ci permette di impostare le proprietà della classe e aggiungere comportamenti. Noi usiamo il modello
proprietà per dire alla collezione da quale classe deve essere costruito ogni oggetto della collezione, che in questo caso è un'istanza della nostra Contatto
modello. Non preoccuparti del fatto che le classi che abbiamo definito finora siano estremamente semplici, torneremo e aggiungeremo funzionalità aggiuntive nelle parti successive del tutorial.
Le viste sono responsabili della visualizzazione dei dati dell'applicazione in una pagina HTML. Uno dei vantaggi di separare le parti dell'applicazione che elaborano i dati e le parti che visualizzano i dati è che possiamo facilmente apportare una modifica a una, senza richiedere modifiche estese all'altra. Useremo un paio di viste nella nostra applicazione, la prima delle quali dovrebbe essere aggiunta direttamente dopo elenco
classe:
var ContactView = Backbone.View.extend (tagName: "article", className: "contact-container", modello: $ ("# contactTemplate"). html (), render: function () var tmpl = _.template (this.template); this. $ el.html (tmpl (this.model.toJSON ())); restituisci questo;);
Questa vista gestisce la visualizzazione di un singolo contatto. Proprio come i modelli e le collezioni, le viste hanno un estendere()
metodo utilizzato per estendere il Backbone.View
classe. Impostiamo diverse proprietà di istanza nella nostra vista; il tagName
la proprietà è usata per specificare il contenitore per la vista e il nome della classe
proprietà specifica un nome di classe che viene aggiunto a questo contenitore. Useremo un semplice modello nel nostro file HTML per rendere ogni contatto, quindi il modello
proprietà memorizza un riferimento memorizzato nella cache del modello, che selezioniamo dalla pagina usando jQuery.
Quindi definiamo a render ()
funzione; questa funzione non è invocata automaticamente da Backbone e mentre potremmo chiamarla dal richiamo automatico inizializzare()
metodo per rendere la vista auto-rendering, non è necessario in questo caso.
All'interno del render ()
metodo memorizziamo un riferimento a Underscore modello()
metodo e passare ad esso il modello memorizzato. Quando viene passato un singolo argomento contenente un modello Underscore non lo richiama immediatamente ma restituisce un metodo che può essere chiamato per rendere effettivamente il modello.
Quindi impostiamo il contenuto HTML di elemento creato dalla vista al modello interpolato usando jQuery
html ()
metodo per convenienza. Questo viene fatto chiamando la funzione di template che Underscore ha restituito in precedenza e passandogli i dati da interpolare. I dati sono ottenuti dal modello usando Backbone toJSON ()
metodo sul modello. Interpolando significa semplicemente che i token all'interno del modello vengono sostituiti con dati reali. Si noti anche che noi usiamo $ EL
per impostare il contenuto HTML; questo è un oggetto jQuery memorizzato nella cache che rappresenta l'elemento corrente in modo che non dobbiamo continuare a creare nuovi oggetti jQuery.
Alla fine di render ()
metodo, restituiamo il Questo
oggetto, che punta all'istanza della vista che il render ()
il metodo è chiamato. Questo è così che possiamo collegare altri metodi Backbone all'istanza della vista dopo averla chiamata render ()
metodo.
Ora sarebbe probabilmente il momento giusto per esaminare le facitlità incorporate di micro-templating di Underscore. Underscore fornisce il Noi usiamo a modello()
metodo come abbiamo visto consumare e interpolare i modelli. Alla pagina HTML dovremmo aggiungere il modello che useremo; aggiungi il seguente codice direttamente dopo il contenitore dei contatti >