Hauptunterschiede, die ich gesehen habe, sind:
- Lenker fügt hinzu
#if
,#unless
,#with
, und#each
- Lenker fügt Helfer hinzu
- Lenkervorlagen werden kompiliert (Schnurrbart kann auch sein)
- Lenker unterstützt Pfade
- Ermöglicht die Verwendung von
{{this}}
in Blöcken (die den Zeichenfolgenwert des aktuellen Elements ausgeben) Handlebars.SafeString()
(und vielleicht einige andere Methoden)- Der Lenker ist zwei- bis siebenmal schneller
- Moustache unterstützt invertierte Abschnitte (dh
if !x ...
)
(Bitte korrigieren Sie mich, wenn ich mit dem oben genannten falsch liege.)
Gibt es noch andere wichtige Unterschiede, die mir fehlen?
handlebars.js
mustache
client-side-templating
templating-engine
Chad Johnson
quelle
quelle
Antworten:
Sie haben es ziemlich genau verstanden, aber es können auch Moustache-Vorlagen kompiliert werden.
Dem Schnurrbart fehlen Helfer und die fortgeschritteneren Blöcke, weil er danach strebt, logisch zu sein. Die benutzerdefinierten Helfer des Lenkers können sehr nützlich sein, führen jedoch häufig zu einer Logik in Ihren Vorlagen.
Moustache hat viele verschiedene Compiler (JavaScript, Ruby, Python, C usw.). Lenker in JavaScript begann, jetzt gibt es Projekte wie django-Lenker , handlebars.java , Lenker-ruby , lightncandy (PHP) und Lenker-objc .
quelle
Schnurrbart-Profis:
Schnurrbart Nachteile:
Lenkerprofis:
Lenker Nachteile:
Quelle: Der clientseitige Vorlagen-Throwdown: Schnurrbart, Lenker, Dust.js und mehr
quelle
tr:nth-child(even)
undtr:nth-child(odd)
oder durchgeführt werden solltetr:nth-child(2n)
. Obwohl dies nur ein Beispiel ist, habe ich das Gefühl, dass Sie (meistens) etwas falsch machen, wenn etwas mit Moustache schwierig oder unangenehm ist. Es gibt einen besseren Ort dafür.Ein subtiler, aber signifikanter Unterschied besteht in der Art und Weise, wie sich die beiden Bibliotheken dem Umfang nähern. Moustache greift auf den übergeordneten Bereich zurück, wenn im aktuellen Kontext keine Variable gefunden werden kann. Lenker geben eine leere Zeichenfolge zurück.
Dies wird in der GitHub README kaum erwähnt, wo es eine Zeile dafür gibt:
Wie dort erwähnt, gibt es jedoch ein Flag, mit dem sich Lenker genauso verhalten wie Schnurrbart - dies beeinträchtigt jedoch die Leistung.
Dies wirkt sich auf die Art und Weise aus, wie Sie
#
Variablen als Bedingungen verwenden können.In Moustache können Sie dies beispielsweise tun:
Es bedeutet im Grunde "wenn eine Variable existiert und wahr ist, drucke eine Spanne mit der Variablen darin". Aber im Lenker müssten Sie entweder:
{{this}}
stattdessen{{../variable}}
um zum relevanten Bereich zurückzukehrenvariable
Wert innerhalb des übergeordnetenvariable
ObjektsWeitere Details dazu, wenn Sie möchten, hier .
quelle
HINWEIS: Diese Antwort ist veraltet. Es war zum Zeitpunkt der Veröffentlichung wahr, ist es aber nicht mehr.
Moustache hat Dolmetscher in vielen Sprachen, während Lenker nur Javascript ist.
quelle
Ein weiterer Unterschied zwischen ihnen ist die Größe der Datei:
Um die Leistungsvorteile von Handlebars.js zu sehen, müssen vorkompilierte Vorlagen verwendet werden.
Quelle: Ein Überblick über JavaScript Templating Engines
quelle
Ein weiterer subtiler Unterschied ist die Behandlung von Falschwerten in
{{#property}}...{{/property}}
Blöcken. Die meisten Schnurrbart Implementierungen werden nur obey JS falsiness hier nicht um den Block zu machen , wennproperty
ist''
oder ‚0‘.Lenker wird der Block für machen
''
und0
, nicht aber andere falsy Werte. Dies kann beim Migrieren von Vorlagen zu Problemen führen.quelle
Ich habe das Gefühl, dass einer der genannten Nachteile für "Lenker" nicht mehr wirklich gültig ist.
Mit Handlebars.java können wir jetzt für Client und Server dieselben Vorlagensprachen verwenden. Dies ist ein großer Gewinn für große Projekte mit mehr als 1000 Komponenten, die für SEO ein serverseitiges Rendering erfordern
Schauen Sie sich https://github.com/jknack/handlebars.java an
quelle
- Zusätzlich zur Verwendung von "this" für Lenker und der verschachtelten Variablen innerhalb des Variablenblocks für Schnurrbart können Sie auch den verschachtelten Punkt in einem Block für Schnurrbart verwenden:
quelle