Rendi il backbone migliore con le estensioni

Backbone sta diventando molto popolare come framework di sviluppo di applicazioni web. Insieme a questa popolarità arrivano innumerevoli estensioni e plug-in per migliorare la potenza della struttura e riempire i buchi che altri sentono necessario riempire. Diamo un'occhiata ad alcune delle migliori scelte.


Backbone.Marionette

Sviluppato da Derick Bailey, questa estensione è abbastanza grande ed è la mia preferita. Piuttosto che aggiungere una o due caratteristiche a Backbone, Derick ha deciso di riempire tutti i buchi più grandi che riteneva esistessero. Ecco cosa dice in merito nel file readme del progetto GitHub.

"Backbone.Marionette è una libreria di applicazioni composite per Backbone.js che mira a semplificare la costruzione di applicazioni JavaScript su larga scala.È una raccolta di schemi di progettazione e implementazione comuni trovati nelle applicazioni che I (Derick Bailey) ha realizzato con Backbone e comprende vari pezzi ispirati a architetture di applicazioni composite, come il framework "Prism" di Microsoft. "

Diamo uno sguardo più da vicino a ciò che ci fornisce Marionette:

  • Applicazione: Questo è un oggetto centrale che può comunicare attraverso tutto l'applicazione. Offre un modo semplice e veloce per configurare le schermate principali dell'applicazione, un hub di eventi centrale che ogni modulo dell'applicazione può comunicare in modo che non dipendano l'uno dall'altro e inizializzatori per il controllo a grana fine di come si avvia la tua applicazione.
  • moduli: Un mezzo per incapsulare il codice del modulo e il namespace di quei moduli sull'oggetto centrale dell'applicazione.
  • Visualizzazioni: Nuove classi di visualizzazione da estendere che offrono metodi nativi per la pulizia, in modo da non finire con perdite di memoria. Contiene anche il boilerplate di rendering; per le viste semplici, è sufficiente specificare il modello e il modello e gestirà il resto.
  • Collezione / Viste composte: È qui che entra in gioco il bit della "libreria di applicazioni composite". Queste due viste consentono di creare facilmente viste in grado di gestire il processo di rendering di tutte le viste in una raccolta o persino una gerarchia nidificata di collezioni e modelli, con uno sforzo minimo.
  • Regioni e layout: Una regione è un oggetto in grado di gestire tutto il lavoro di rendering, unrendering e chiusura di viste per un determinato punto nel DOM. Un layout è semplicemente una vista normale che include anche delle regioni incorporate per la gestione delle sottoview.
  • AppRouter: Un nuovo tipo di router che può assumere un controller per gestire il carico di lavoro in modo che il router possa contenere solo la configurazione dei percorsi.
  • eventi: Esteso dal progetto Wreqr, Marionette rende gli eventi di Backbone ancora più potenti per la creazione di applicazioni basate su eventi su larga scala.

Ho solo graffiato la superficie di ciò che può fare Marionette. Consiglio vivamente di andare su GitHub e leggere la loro documentazione sul Wiki.

Inoltre, Andrew Burgess copre Marionette nel suo corso Tuts + Premium Backbone Patterns and Techniques.


Backbone.Validation

Backbone.Validation è progettato per riempire una piccola nicchia di un problema: vale a dire, la validazione del modello. Ci sono diverse estensioni di validazione per Backbone, ma questo sembra aver raccolto il massimo rispetto dalla comunità.

Piuttosto che dover scrivere a convalidare metodo per i tuoi modelli, puoi creare un convalida proprietà per i tuoi modelli, che è un oggetto che specifica ciascuno degli attributi che desideri convalidare e un elenco di regole di convalida per ciascuno di questi attributi. È inoltre possibile specificare i messaggi di errore per ciascun attributo e passare in funzioni personalizzate per la convalida di un singolo attributo. Puoi vedere un esempio qui sotto, che è modificato da uno degli esempi sul loro sito web.

 var SomeModel = Backbone.Model.extend (validation: nome: richiesto: true, 'address.street': richiesto: true, 'address.zip': length: 4, age: range: [1, 80], email: pattern: 'email', // fornisce il tuo messaggio di errore msg: "Inserisci un indirizzo email valido", // funzione di convalida personalizzata per 'someAttribute' someAttribute: function (value) if (value! == 'somevalue') return 'Error message';);

Esistono innumerevoli validatori e schemi incorporati che è possibile verificare, e c'è persino un modo per estendere l'elenco con i propri validatori globali. Questo plugin Backbone non rende divertente la validazione, ma elimina certamente qualsiasi scusa per non aggiungere la convalida. Si prega di visitare il loro sito per ulteriori esempi e una spiegazione più profonda su come utilizzare questo meraviglioso strumento.


Backbone.LayoutManager

Backbone.LayoutManager punta a migliorare le viste di Backbone. Come Backbone.Marionette, introduce codice di cleanup per prevenire perdite di memoria, gestisce tutto il boilerplate e lascia solo la configurazione e il codice specifico dell'applicazione. A differenza di Marionette, LayoutManager si concentra in particolare su Views.

Poiché LayoutManager si concentra esclusivamente su Views, può fare di più per le visualizzazioni rispetto a Marionette. Ad esempio, LayoutManager è in grado di eseguire il rendering asincrono, nel caso in cui si desideri caricare i modelli dinamicamente da file esterni.

LayoutManager può anche gestire le sottoview, anche se in modo molto diverso da Marionette. In ogni caso, è in gran parte la configurazione, che rende le cose estremamente semplici ed elimina il 90% del lavoro che avresti dovuto fare, se stavi cercando di implementarlo tutto da solo. Dai un'occhiata qui sotto per un semplice esempio per aggiungere tre sottoview a una vista:

 Backbone.Layout.extend (views: "header": nuovo HeaderView (), "section": nuovo ContentView (), "footer": new FooterView ());

Come al solito, assicurati di fare riferimento alla pagina e alla documentazione di GitHub per saperne di più.


Backbone.ModelBinder

Backbone.ModelBinder crea collegamenti tra i dati nei tuoi modelli e il markup mostrato dalle tue visualizzazioni. Puoi già farlo legando all'evento change sui tuoi modelli e rendendo di nuovo la vista, ma ModelBinder è più efficiente e più semplice da usare.

Dai un'occhiata al codice qui sotto:

 var MyView = Backbone.View.extend (template: _.template (myTemplate), initialize: function () // Old Backbone.js way this.model.on ('change', this.render, this); / / o il nuovo Backbone 0.9.10+ come this.listenTo (this.model, 'change', this.render);, render: function () this. $ el.html (this.template (this.model. toJSON ())););

Il problema con questo approccio è che ogni volta che viene modificato un singolo attributo, abbiamo bisogno di ri-renderizzare l'intera vista. Inoltre, con ogni rendering, dobbiamo convertire il modello in JSON. Infine, se vuoi che il binding sia bidirezionale (quando il modello si aggiorna, così fa il DOM e viceversa), allora dobbiamo aggiungere ancora più logica alla vista.

Questo esempio stava usando Underscore modello funzione. Supponiamo che il modello che abbiamo passato in esso assomigli:

 

Usando i tag <%= e %> fare il modello la funzione sostituisce quelle aree con il nome di battesimo e cognome proprietà esistenti nel JSON che abbiamo inviato dal modello. Supponiamo che il modello abbia entrambi questi attributi.

Con ModelBinder, invece, possiamo rimuovere quei tag di template e inviarli normalmente HTML. ModelBinder vedrà il valore di nome attributo sul ingresso tag e assegnerà automaticamente il valore del modello per quella proprietà a valore attributo del tag. Ad esempio, il primo ingresso'S nome è impostato su "firstName". Quando usiamo ModelBinder, lo vedremo e poi lo imposteremo ingresso'S valore alla modella nome di battesimo proprietà.

Di seguito, vedremo come il nostro precedente esempio dovrebbe occuparsi del passaggio a ModelBinder. Inoltre, renditi conto che il legame è bidirezionale, quindi se il ingresso i tag sono aggiornati, il modello verrà aggiornato automaticamente per noi.

Modello HTML:

 

Vista JavaScript:

 var MyView = Backbone.View.extend (template: myTemplate, initialize: function () // Non c'è più binding in qui, render: function () // Lancia l'HTML direttamente in questo. $ el.html (this .template); // Usa ModelBinder per associare il modello e visualizzare modelBinder.bind (this.model, this.el););

Ora abbiamo modelli HTML puliti e abbiamo bisogno solo di una singola riga di codice per collegare l'HTML della vista e i modelli usando insieme modelBinder.bind. modelBinder.bind accetta due argomenti obbligatori e un argomento opzionale. Il primo argomento è il modello con i dati che verranno associati al DOM. Il secondo è il nodo DOM che verrà attraversato in modo ricorsivo, cercando i binding da fare. L'argomento finale è a rilegatura oggetto che specifica regole avanzate per il modo in cui devono essere eseguite le associazioni, se non ti piace l'utilizzo predefinito.

ModelBinder può essere utilizzato su più di un semplice ingresso tag. Funziona su qualsiasi elemento. Se l'elemento è un tipo di input di modulo, come ingresso, selezionare, o textarea, aggiornerà i valori di tali elementi, di conseguenza. Se ti leghi a un elemento, come a div o campata, posizionerà i dati del modello tra i tag di apertura e di chiusura di quell'elemento (ad es. [i dati vanno qui]).

C'è molto più potere dietro Backbone.ModelBinder rispetto a quello che ho dimostrato qui, quindi assicurati di leggere la documentazione sul repository GitHub per imparare tutto su di esso.


Conclusione

Questo avvolge le cose. Ho solo coperto una manciata di estensioni e plugin, ma questi sono quelli che considero maggiormente utili.

Il paesaggio Backbone è in continua evoluzione. Se desideri visualizzare un elenco completo delle varie estensioni Backbone disponibili, visita questa pagina wiki, che il team Backbone aggiorna regolarmente.