Backbone ist...
...eine sehr kleine Bibliothek von Komponenten, die Sie verwenden können, um Ihren Code zu organisieren. Sie wird als eine einzige JavaScript-Datei geliefert. Abgesehen von den Kommentaren enthält sie weniger als 1000 Zeilen tatsächliches JavaScript. Es ist vernünftig geschrieben, und Sie können das Ganze in ein paar Stunden lesen.
Es handelt sich um eine Front-End-Bibliothek, die Sie mit einem Skript-Tag in Ihre Webseite einbinden. Sie wirkt sich nur auf den Browser aus und sagt wenig über Ihren Server aus, außer dass sie idealerweise eine restful API bereitstellen sollte.
Wenn Sie eine API haben, verfügt Backbone über einige hilfreiche Funktionen, die Ihnen helfen, mit ihr zu kommunizieren. Sie können Backbone aber auch verwenden, um jeder statischen HTML-Seite Interaktivität hinzuzufügen.
Backbone ist für...
...Struktur in JavaScript hinzufügen.
Da JavaScript keine bestimmten Muster vorschreibt, können JavaScript-Anwendungen sehr schnell unübersichtlich werden. Jeder, der schon einmal etwas mehr als nur triviales in JavaScript entwickelt hat, wird wahrscheinlich auf Fragen wie diese gestoßen sein:
- Wo werde ich meine Daten speichern?
- Wo werde ich meine Funktionen unterbringen?
- Wie werde ich meine Funktionen miteinander verdrahten, so dass sie sinnvoll aufgerufen werden und nicht zu Spaghetti werden?
- Wie kann ich diesen Code für verschiedene Entwickler wartbar machen?
Backbone versucht, diese Fragen zu beantworten, indem es Ihnen zur Verfügung steht:
- Modelle und Sammlungen, um Ihnen bei der Darstellung von Daten und Datensammlungen zu helfen.
- Ansichten, damit Sie Ihr DOM aktualisieren können, wenn sich Ihre Daten ändern.
- Ein Ereignissystem, damit die Komponenten sich gegenseitig abhören können. Dies hält Ihre Komponenten entkoppelt und verhindert eine Spaghettifizierung.
- Ein minimaler Satz sinnvoller Konventionen, damit Entwickler gemeinsam an der gleichen Codebasis arbeiten können.
Wir nennen dies ein MV*-Muster. Modelle, Ansichten und Sonderausstattungen.
Backbone ist leicht
Entgegen dem ersten Anschein ist Backbone fantastisch leicht, es macht fast gar nichts. Was es tut, ist sehr hilfreich.
Es gibt Ihnen eine Reihe von kleinen Objekten, die Sie erstellen können, und die Ereignisse aussenden und aufeinander hören können. Sie könnten zum Beispiel ein kleines Objekt erstellen, das einen Kommentar darstellt, und dann ein kleines commentView-Objekt, das die Anzeige des Kommentars an einer bestimmten Stelle im Browser darstellt.
Sie können die commentView anweisen, auf den Kommentar zu hören und sich neu zu zeichnen, wenn sich der Kommentar ändert. Selbst wenn derselbe Kommentar an mehreren Stellen auf Ihrer Seite angezeigt wird, können alle diese Ansichten auf dasselbe Kommentarmodell hören und synchron bleiben.
Diese Art der Codeerstellung hilft, sich nicht zu verheddern, selbst wenn die Codebasis sehr groß wird und viele Interaktionen aufweist.
Modelle
Zu Beginn ist es üblich, die Daten entweder in einer globalen Variablen oder im DOM als Datenattribute . Bei beiden gibt es Probleme. Globale Variablen können miteinander kollidieren und sind im Allgemeinen unzulässig. Datenattribute, die im DOM gespeichert werden, können nur Strings sein, Sie müssen sie ein- und wieder ausparsen. Es ist schwierig, Dinge wie Arrays, Daten oder Objekte zu speichern und die Daten in einer strukturierten Form zu parsen.
Die Datenattribute sehen wie folgt aus:
<p data-username="derek" data-age="42"></p>
Backbone löst dieses Problem, indem es ein Model-Objekt bereitstellt, das Ihre Daten und die zugehörigen Methoden repräsentiert . Angenommen, Sie haben eine ToDo-Liste, dann würden Sie ein Modell haben, das jedes Element auf dieser Liste darstellt.
Wenn Ihr Modell aktualisiert wird, löst es ein Ereignis aus. Möglicherweise haben Sie eine Ansicht, die an dieses bestimmte Objekt gebunden ist. Die Ansicht lauscht auf Modelländerungsereignisse und stellt sich selbst neu dar.
Ansichten
Backbone bietet Ihnen View-Objekte, die mit dem DOM kommunizieren. Alle Funktionen, die das DOM manipulieren oder auf DOM-Ereignisse warten, werden hier ausgeführt.
Eine Ansicht implementiert typischerweise eine Renderfunktion, die die gesamte Ansicht oder möglicherweise einen Teil der Ansicht neu zeichnet. Es besteht keine Verpflichtung, eine Render-Funktion zu implementieren, aber es ist eine gängige Konvention.
Jede Ansicht ist an einen bestimmten Teil des DOM gebunden, so dass Sie z. B. eine searchFormView haben, die nur das Suchformular anzeigt, und eine shoppingCartView, die nur den Einkaufswagen anzeigt.
Ansichten sind in der Regel auch an bestimmte Modelle oder Sammlungen gebunden. Wenn das Modell aktualisiert wird, löst es ein Ereignis aus, auf das die Ansicht hört. Die Ansicht kann dann render aufrufen, um sich neu zu zeichnen.
Ebenso kann Ihre Ansicht ein Modellobjekt aktualisieren, wenn Sie etwas in ein Formular eingeben. Jede andere Ansicht, die auf dieses Modell zugreift, ruft dann ihre eigene Renderfunktion auf.
Dadurch erhalten wir eine saubere Trennung von Belangen, die unseren Code ordentlich und aufgeräumt hält.
Die Renderfunktion
Sie können Ihre Renderfunktion auf jede beliebige Art und Weise implementieren, die Sie für angemessen halten. Sie könnten nur einige jQuery in hier setzen, um das DOM manuell zu aktualisieren.
Sie können auch eine Vorlage kompilieren und diese verwenden. Eine Vorlage ist einfach eine Zeichenkette mit Einfügepunkten. Sie übergeben sie zusammen mit einem JSON-Objekt an eine Kompilierfunktion und erhalten eine kompilierte Zeichenfolge zurück, die Sie in Ihr DOM einfügen können.
Sammlungen
Sie haben auch Zugriff auf Sammlungen, in denen Listen von Modellen gespeichert werden, so wäre eine todoCollection eine Liste von todo-Modellen. Wenn eine Sammlung ein Modell erhält oder verliert, ihre Reihenfolge ändert oder ein Modell in einer Sammlung aktualisiert wird, löst die gesamte Sammlung ein Ereignis aus.
Eine Ansicht kann auf eine Sammlung hören und sich selbst aktualisieren, wenn die Sammlung aktualisiert wird.
Sie könnten Ihrer Sammlung Sortier- und Filtermethoden hinzufügen und sie zum Beispiel automatisch sortieren lassen.
Und Ereignisse, die alles miteinander verbinden
Die Anwendungskomponenten sind so weit wie möglich voneinander entkoppelt. Sie kommunizieren über Ereignisse, so dass eine shoppingCartView auf eine shoppingCart-Sammlung hören und sich selbst neu zeichnen könnte, wenn der Warenkorb hinzugefügt wird.
shoppingCartView.listenTo(shoppingCart, "add", shoppingCartView.render);
Natürlich können auch andere Objekte den shoppingCart abhören und andere Dinge tun, wie z. B. eine Gesamtsumme aktualisieren oder den Status im lokalen Speicher speichern.
- Ansichten hören auf Modelle und rendern, wenn sich das Modell ändert.
- Ansichten hören auf Sammlungen und stellen eine Liste (oder ein Gitter oder eine Karte usw.) dar, wenn sich ein Element in der Sammlung ändert.
- Modelle hören auf Ansichten, so dass sie ihren Zustand ändern können, etwa wenn ein Formular bearbeitet wird.
Wenn Sie Ihre Objekte auf diese Weise entkoppeln und mit Hilfe von Ereignissen kommunizieren, verheddern Sie sich nicht mehr, und das Hinzufügen neuer Komponenten und Verhaltensweisen ist einfach. Ihre neuen Komponenten müssen nur auf die anderen Objekte hören, die bereits im System vorhanden sind.
Konventionen
Der für Backbone geschriebene Code folgt einer losen Reihe von Konventionen. DOM-Code gehört in eine View. Sammlungscode gehört in eine Sammlung. Geschäftslogik gehört in ein Model. Ein anderer Entwickler, der Ihre Codebasis aufnimmt, kann sofort loslegen.
Zusammenfassend
Backbone ist eine leichtgewichtige Bibliothek, die Ihrem Code Struktur verleiht. Die Komponenten sind entkoppelt und kommunizieren über Ereignisse, sodass Sie nicht in einem Chaos enden. Sie können Ihre Codebasis ganz einfach erweitern, indem Sie ein neues Objekt erstellen und es entsprechend auf Ihre vorhandenen Objekte hören lassen. Ihr Code wird sauberer, übersichtlicher und besser wartbar.
Mein kleines Buch
Ich mochte Backbone so sehr, dass ich ein kleines Einführungsbuch darüber geschrieben habe. Sie können es hier online lesen: http://nicholasjohnson.com/backbone-book/
Ich habe das Material auch in einen kurzen Online-Kurs aufgeteilt, den Sie hier finden können aquí (archiviert). Sie können den Kurs in etwa einem Tag abschließen.
36 Stimmen
Es ist ein MVC-Framework. Es ermutigt Sie, Ihre Daten in Modelle und Ihre DOM-Manipulation in Ansichten zu abstrahieren und die beiden über Ereignisse miteinander zu verbinden.
0 Stimmen
Wie kann eine "Ansicht" Ereignisse im Kontext von MVC behandeln? Dies ist, was backbonejs.org in ihrer Einführung behauptet.
3 Stimmen
Es lohnt sich zu lernen. Mir fiel der Einstieg schwer, aber nachdem ich ein paar Stolpersteine überwunden hatte, ist es wirklich nicht mehr allzu schwer. Beginnen Sie mit der Weinkeller-Demo.
2 Stimmen
Im Kontext von Backbone fungiert der View quasi als Controller. Sie hört auf DOM-Ereignisse und leitet sie gegebenenfalls an die Modelle weiter. Er hört auch auf Änderungen an Ihren Modellen und Sammlungen und zeichnet das DOM entsprechend neu. Backbone ist ein MV-Muster, aber das C ist impliziert. Wäre Backbone Rails, wäre das Template der View, und der View der Controller.
0 Stimmen
Ich dachte, es ist ein MVVM-Framework, da es eigentlich keine Controller bietet.
0 Stimmen
Und eine Folgefrage: Was ist mit Backbone passiert? Warum ist es nicht mehr angesagt? Es ist auf jeden Fall einfacher als Angular