Machen Sie Backbone mit Erweiterungen besser

Backbone wird als Framework für die Entwicklung von Webanwendungen immer beliebter. Zusammen mit dieser Popularität gibt es unzählige Erweiterungen und Plugins, um die Leistungsfähigkeit des Frameworks zu verbessern und Löcher zu füllen, die von anderen Benutzern nachgefüllt werden mussten. Schauen wir uns einige der besten Möglichkeiten an.


Rückgrat.Marionette

Diese von Derick Bailey entwickelte Erweiterung ist recht groß und ist mein persönlicher Favorit. Anstatt ein oder zwei Features zu Backbone hinzuzufügen, beschloss Derick, alle größten Löcher zu füllen, die er für existent hielt. Was er dazu in der Readme-Datei des GitHub-Projekts sagt.

"Backbone.Marionette ist eine zusammengesetzte Anwendungsbibliothek für Backbone.js, die darauf abzielt, die Erstellung umfangreicher JavaScript-Anwendungen zu vereinfachen. Es ist eine Sammlung allgemeiner Entwurfs- und Implementierungsmuster, die in den Anwendungen gefunden werden, die ich (Derick Bailey) mit Backbone erstellt habe und enthält verschiedene Stücke, die von Composite-Anwendungsarchitekturen inspiriert wurden, wie beispielsweise das Prism-Framework von Microsoft.

Schauen wir uns genauer an, was Marionette uns bietet:

  • Anwendung: Dies ist ein zentrales Objekt, über das alles in Ihrer Anwendung kommunizieren kann. Es bietet eine Möglichkeit, die Hauptansicht (en) Ihrer Anwendung schnell und einfach einzurichten, einen zentralen Ereignishub, über den jedes Modul in Ihrer Anwendung kommunizieren kann, sodass sie nicht voneinander abhängig sind, und Initialisierer für eine fein abgestimmte Steuerung wie Ihre Anwendung startet.
  • Module: Mittel zum Einkapseln von Modulcode und Namensraum für diese Module im zentralen Anwendungsobjekt.
  • Ansichten: Neue Ansichtsklassen zur Erweiterung bieten native Methoden für die Bereinigung, so dass Sie keine Speicherlecks bekommen. Es enthält auch Rendering Boilerplate; Für einfache Ansichten geben Sie einfach die Vorlage und das Modell an.
  • Sammlung / zusammengesetzte Ansichten: Hier kommt das Bit "Composite Application Library" ins Spiel. Mit diesen beiden Ansichten können Sie auf einfache Weise Ansichten erstellen, die das Rendern aller Ansichten einer Sammlung oder sogar einer verschachtelten Hierarchie von Sammlungen und Modellen mit sehr geringem Aufwand erledigen können.
  • Regionen und Layouts: Ein Bereich ist ein Objekt, das die gesamte Arbeit des Renderns, Aufnehmens und Schließens von Ansichten für eine bestimmte Stelle im DOM erledigen kann. Ein Layout ist einfach eine normale Ansicht, in die auch Regionen zur Verwaltung von Unteransichten integriert sind.
  • AppRouter: Ein neuer Routertyp, mit dem ein Controller die Arbeitslast verarbeiten kann, sodass der Router nur die Konfiguration der Routen enthalten kann.
  • Veranstaltungen: Marionette erweitert das Wreqr-Projekt und macht Backbones Ereignisse noch leistungsfähiger für die Erstellung umfangreicher ereignisbasierter Anwendungen.

Ich habe nur die Oberfläche dessen gekratzt, was Marionette kann. Ich empfehle auf jeden Fall, zu GitHub zu gehen und deren Dokumentation im Wiki zu lesen.

Darüber hinaus deckt Andrew Burgess Marionette in seinem Kurs "Tuts + Premium Advanced Backbone Patterns and Techniques" ab.


Backbone.Validierung

Backbone.Validation füllt eine kleine Nische eines Problems aus: Modellvalidierung. Es gibt mehrere Validierungserweiterungen für Backbone, aber diese scheint der Community den meisten Respekt zu verschaffen.

Anstatt tatsächlich schreiben zu müssen bestätigen Methode für Ihre Modelle können Sie eine erstellen Validierung Eine Eigenschaft für Ihre Modelle. Hierbei handelt es sich um ein Objekt, das jedes der zu validierenden Attribute und eine Liste von Validierungsregeln für jedes dieser Attribute angibt. Sie können auch Fehlernachrichten für jedes Attribut angeben und benutzerdefinierte Funktionen zur Überprüfung eines einzelnen Attributs übergeben. Unten sehen Sie ein Beispiel, das von einem der Beispiele auf der Website abgeändert wurde.

 var SomeModel = Backbone.Model.extend (validation: name: erforderlich: wahr, 'address.street': erforderlich: true, 'address.zip'): Länge: 4, Alter: Bereich: [1, 80], E-Mail: Muster: 'E-Mail', // eigene Fehlermeldung angeben msg: "Bitte geben Sie eine gültige E-Mail-Adresse ein" // Benutzerdefinierte Überprüfungsfunktion für 'someAttribute' someAttribute: function (value) if (value! == 'somevalue') gibt 'Fehlermeldung' zurück;);

Es gibt unzählige eingebaute Validatoren und Muster, mit denen Sie überprüfen können, und es gibt sogar eine Möglichkeit, die Liste mit Ihren eigenen globalen Validatoren zu erweitern. Dieses Backbone-Plugin macht die Validierung zwar nicht gerade spaßig, beseitigt aber sicherlich alle Ausreden, um die Validierung nicht hinzuzufügen. Bitte besuchen Sie die Website für weitere Beispiele und eine ausführlichere Erklärung für die Verwendung dieses wunderbaren Tools.


Backbone.LayoutManager

Bei Backbone.LayoutManager geht es darum, die Ansichten von Backbone zu verbessern. Wie Backbone.Marionette führt es Bereinigungscode ein, um Speicherverluste zu vermeiden, übernimmt die gesamte Boilerplate und sorgt nur für Konfiguration und anwendungsspezifischen Code. Im Gegensatz zu Marionette konzentriert sich LayoutManager speziell auf Ansichten.

Da LayoutManager sich ausschließlich auf Ansichten konzentriert, kann er mehr für die Ansichten als Marionette tun. Zum Beispiel ist LayoutManager in der Lage, asynchrones Rendering durchzuführen, falls Sie Ihre Vorlagen dynamisch aus externen Dateien laden möchten.

LayoutManager kann auch Subviews behandeln, jedoch auf eine ganz andere Art und Weise als Marionette. In beiden Fällen handelt es sich jedoch im Wesentlichen um Konfigurationen, was die Dinge extrem einfach macht und 90% der Arbeit überflüssig macht, die Sie hätten erledigen müssen, wenn Sie dies alles alleine implementieren wollten. Unten finden Sie ein einfaches Beispiel zum Hinzufügen von drei Unteransichten zu einer Ansicht:

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

Lesen Sie wie üblich die GitHub-Seite und die Dokumentation, um mehr zu erfahren.


Backbone.ModelBinder

Backbone.ModelBinder erstellt Verknüpfungen zwischen den Daten in Ihren Modellen und der von Ihren Ansichten angezeigten Markierung. Sie können dies bereits tun, indem Sie an das Änderungsereignis Ihrer Modelle binden und die Ansicht erneut rendern. ModelBinder ist jedoch effizienter und einfacher zu verwenden.

Sehen Sie sich den Code unten an:

 var MyView = Backbone.View.extend (template: _.template (myTemplate), initialize: function () // Alte Backbone.js-Methode) this.model.on ('change', this.render, this); / / oder das neue Backbone 0.9.10+ weg this.listenTo (this.model, 'change', this.render);, render: function () this. $ el.html (this.template (this.model. toJSON ())););

Das Problem bei diesem Ansatz ist, dass bei jeder Änderung eines einzelnen Attributs die gesamte Ansicht erneut gerendert werden muss. Bei jedem Rendern müssen wir das Modell auch in konvertieren JSON. Wenn die Bindung schließlich bidirektional sein soll (wenn das Modell aktualisiert wird, auch das DOM und umgekehrt), müssen wir der Ansicht noch mehr Logik hinzufügen.

In diesem Beispiel wurden Underscores verwendet Vorlage Funktion. Nehmen wir an, die Vorlage, die wir übergeben haben, sieht so aus:

 

Verwenden der Tags <%= und %> mach das Vorlage Funktion ersetzen diese Bereiche durch die Vorname und Nachname Eigenschaften, die in der von dem Modell gesendeten JSON vorhanden sind. Wir nehmen an, dass das Modell auch beide Attribute hat.

Mit ModelBinder können wir stattdessen diese Vorlagen-Tags entfernen und normal senden HTML. ModelBinder sieht den Wert von Name Attribut auf die Eingang Tag, und weist dem Modell automatisch den Wert des Modells für diese Eigenschaft zu Wert Attribut des Tags. Zum Beispiel der erste Eingang's Name ist auf "firstName" gesetzt. Wenn wir ModelBinder verwenden, wird dies erkannt und dann festgelegt Eingang's Wert zu den Modellen Vorname Eigentum.

Nachfolgend sehen Sie, wie unser vorheriges Beispiel aussehen würde, nachdem Sie zu ModelBinder gewechselt haben. Beachten Sie auch, dass die Bindung bidirektional ist Eingang Tags werden aktualisiert, das Modell wird für uns automatisch aktualisiert.

HTML-Vorlage:

 

JavaScript-Ansicht:

 var MyView = Backbone.View.extend (template: myTemplate, initialize: function () // Hier ist keine weitere Bindung erforderlich), render: function () // Das HTML-Recht in dieser. $ el.html (this.) werfen .template); // Verwenden Sie ModelBinder zum Binden des Modells und sehen Sie modelBinder.bind (this.model, this.el);;

Jetzt haben wir saubere HTML-Vorlagen und benötigen nur eine einzige Codezeile, um den HTML-Code der Ansicht und die Modelle miteinander zu verbinden modelBinder.bind. modelBinder.bind nimmt zwei erforderliche Argumente und ein optionales Argument an. Das erste Argument ist das Modell mit den Daten, die an das DOM gebunden werden. Der zweite ist der DOM-Knoten, der rekursiv durchlaufen wird und nach Bindungen sucht, die erstellt werden sollen. Das letzte Argument ist a Bindung Objekt, das erweiterte Regeln für die Ausführung von Bindungen festlegt, wenn Sie die Standardnutzung nicht mögen.

ModelBinder kann mehr als nur verwendet werden Eingang Stichworte. Es funktioniert für jedes Element. Wenn das Element eine Art Formulareingabe ist, z Eingang, wählen, oder Textbereich, Die Werte dieses Elements werden entsprechend aktualisiert. Wenn Sie an ein Element binden, z div oder Spanne, Dadurch werden die Daten des Modells zwischen den öffnenden und schließenden Tags dieses Elements platziert (z. [Daten gehen hier]).

Hinter Backbone.ModelBinder steckt viel mehr Leistung als hier gezeigt. Lesen Sie daher die Dokumentation im GitHub-Repository, um alles darüber zu erfahren.


Fazit

Das fasst die Dinge zusammen. Ich habe nur eine Handvoll Erweiterungen und Plugins behandelt, aber diese sind meiner Meinung nach am nützlichsten.

Die Backbone-Landschaft verändert sich ständig. Wenn Sie eine umfassende Liste der verschiedenen verfügbaren Backbone-Erweiterungen anzeigen möchten, besuchen Sie diese Wiki-Seite, die vom Backbone-Team regelmäßig aktualisiert wird.