10

Ich bin dabei, Backbone und Backbone.Marionette in ein bestehendes Webanwendungsprojekt zu integrieren. Wir planen, alle vorhandenen Funktionen im Projekt für den Augenblick allein zu lassen, aber bei jeder neuen Funktionalität werden wir die Backbone-Strukturierung und die Marionetten-Prinzipien nutzen. Eine der ersten Aufgaben ist die Entscheidung für eine HTML-Template-Rendering-Bibliothek sowie eine Datenbindungslösung für diese Templates. Zuvor verwendeten wir JsRender und JsViews für alle unsere Template-Bedürfnisse und Datenbindung, aber wir sind bereit, neue Wege für unsere neue Funktionalität zu erkunden. Im Grunde habe ich verschiedene Lösungen erforscht und brauche jetzt einige Ratschläge oder Gedanken, was ich wählen soll. Hier ist, was ich an so weit ausgesehen haben:Backbone: Model-to-Template- und Template-to-Model-Bindung

Backbone.StickIt:

Pros: Scheint Backbone Idee der Trennung von Bedenken, zu folgen, die Ihre Vorlagen halten hilft sehr „sauber“.

Nachteile: Es sieht so aus, als müssten Sie in Ihren Ansichten etwas mehr Code schreiben, um Bindungen zu definieren. Außerdem scheint es nicht möglich zu sein, bedingtes Rendering durchzuführen, sodass Sie immer die vollständige Vorlage rendern und nur die Anzeige bestimmter Elemente umschalten müssen.

Rivets.js:

Vorteile: Behandelt ein bisschen mehr Datenoptionen in der Vorlage Bindung, ohne es zu unübersichtlich zu machen.

Nachteile: Auch scheint bedingte Rendering zu fehlen.

Knockback/Knockout:

Vorteile: Behandelt alle Arten von Datenanforderungen durch Attribute verbindlich.

Nachteile: Einfach zu starten "verschmutzen" die Vorlage mit Konvertern. Sie müssen einen weiteren Schritt hinzufügen, um Knockout-View-Modelle aus Backbone-Modellen zu erstellen.

JsViews:

Pros: ähnlich Fähigkeiten Knockout der aber mit unterschiedlicher Syntax. Behandelt bedingtes Rendering.

Nachteile: In der Vergangenheit haben wir unsere Vorlagen mit zu viel Geschäftslogik innerhalb der Vorlage verschmutzt, aber das könnte ein Problem mit unserer Entwicklung sein, das wir korrigieren können. Sie müssen Funktionen erstellen, um die Observability-Funktionalität von JsViews mit Backbone-Modellereignissen zu verknüpfen. Andere Bibliotheken wie StickIt und Knockback erledigen dies automatisch.

Wir sahen auch Backbone.ModelBinder in die irgendwo dazwischen StickIt und Nieten.

Kann irgendjemand irgendwelche Entscheidungen teilen, die sie getroffen haben und warum sie ein Plugin/eine Bibliothek gegenüber einem anderen gewählt haben? Ich bin auch offen für andere Vorschläge. Vielen Dank.

Antwort

2

Ich habe diese

Moustache verwendet.js

Pro's: Nicht nur unterstützt Schnurrbart variable Bindung, aber es kann auch Funktion Bindung zu behandeln. Zum Beispiel können Sie haben

<a href="{{test}}" >click me </a> 

Und dann aus Ihrer Sicht haben eine Methode namens test. Dies spart eine Menge redundanter Zuweisung von Klasse/ID zum Verknüpfen und Binden des Ereignisses in der View-Klasse.

Nachteile: Ich mag nicht die Syntax davon.

Als nächstes verwende ich coffeescript in Ruby on Rails, die ein eingebautes jst Eco Templating System hat. Ein Profi ist, Sie haben die Vorlagen in separaten Dateien. Bei Paging werden sie an eine globale Variable im Dom gebunden. Diese werden minimiert und sind viel besser als einige Pseudo-Skript-Template-Tags. Ein anderer Profi ist, du schreibst wenn sonst und für Loops wie du in Ruby. Der Nachteil ist, dass sie Razor-Tags verwenden und nicht einfach mit serverseitigem Code (wie eine Übersetzung) gemischt werden können.

Andere Bibliothek ist natürlich Unterstreichung Templating-Engine. Sehr einfach, aber ziemlich stark. Proside, Sie haben es bereits verfügbar (Unterstrich ist für Backbone erforderlich). Nachteil ist, dass Sie (standardmäßig) keine Vorlage aus einer externen Datei laden können. Ich habe das mit serverseitigem Code gelöst (require_once, partially render). Wenn Sie require.js jedoch zusammen mit dem Text-Plugin (http://requirejs.org/docs/download.html#text) verwenden, können Sie Vorlagen als Abhängigkeit laden.

+1

Ich überprüft Unterstreichung (lustig, dass ich nicht in Betracht gezogen hatte, es ist enthalten, wie Sie erwähnt). Ich dachte, wir könnten die gleichen Probleme mit "Spaghetti" -Templates haben. Das Hauptproblem ist, dass wir eine Reihe von Entwicklern haben, die an Templates arbeiten, und wir haben begonnen, zu viel Logik und Template-Syntax in das HTML zu integrieren. Um uns zu zwingen, diese Gewohnheit aufzugeben, entschieden wir uns für Backbone.Stickit. Es sieht so aus, als würde es einige Zeit dauern, sich an das Erstellen von Bindungen außerhalb des Templates zu gewöhnen, aber hoffentlich werden wir von der "Reinheit" unseres HTML-Codes profitieren. Danke für deinen Beitrag. –