Les principales différences que j'ai vues sont les suivantes:
#if
, #unless
, #with
et #each
{{this}}
dans des blocs (qui fournissent la valeur de chaîne de l'élément en cours)Handlebars.SafeString()
(et peut-être d'autres méthodes)if !x ...
)(S'il vous plaît corrigez-moi si je me trompe avec ce qui précède.)
Y a-t-il d'autres différences majeures qui me manquent?
Vous l'avez à peu près cloué, mais des modèles de moustache peuvent également être compilés.
Moustache manque des aides et des blocs plus avancés car il s’efforce d’être dépourvu de logique. Les aides personnalisées du guidon peuvent être très utiles, mais finissent souvent par introduire une logique dans vos modèles.
Moustache a beaucoup de compilateurs différents (JavaScript, Ruby, Python, C, etc.). Le guidon a commencé en JavaScript. Il existe maintenant des projets tels que Django-handlebars , handlebars.Java , guidon-Ruby , lightncandy (PHP ) , et handlebars-objc .
Moustache pros:
Moustache contre:
Guidons professionnels:
Guidons contre:
Source: Le jeu de modèles côté client: moustache, guidon, dust.js, etc.
Une différence subtile mais significative réside dans la manière dont les deux bibliothèques abordent la portée. Moustache retombera sur la portée parent si elle ne peut pas trouver une variable dans le contexte actuel. Le guidon renverra une chaîne vide.
C’est à peine mentionné dans le fichier README de GitHub, où il n’ya qu’une ligne:
Le guidon s'écarte légèrement de Moustache en ce sens qu'il n'effectue pas de recherche récursive par défaut.
Cependant, comme indiqué ici, il existe un indicateur permettant aux guidons de se comporter de la même manière que Moustache, mais cela affecte les performances.
Cela a un effet sur la manière dont vous pouvez utiliser les variables #
comme conditionnelles.
Par exemple dans Moustache, vous pouvez faire ceci:
{{#variable}}<span class="text">{{variable}}</span>{{/variable}}
Cela signifie fondamentalement "si la variable existe et est la vérité, affiche une étendue contenant la variable". Mais dans le guidon, vous devez soit:
{{this}}
à la place{{../variable}}
pour revenir à la portée correspondantevariable
valeur dans l'objet parent variable
Plus de détails à ce sujet, si vous les voulez, ici .
NOTE: Cette réponse est obsolète. C'était vrai au moment où il a été posté, mais ce n'est plus le cas.
Moustache a des interprètes dans de nombreuses langues, tandis que Handlebars est en Javascript.
Une autre différence entre eux est la taille du fichier:
Pour voir les avantages de Handlebars.js en termes de performances, nous devons utiliser des modèles précompilés.
Une autre différence subtile est le traitement des valeurs de fausseté dans les blocs {{#property}}...{{/property}}
. La plupart des implémentations de moustache obéiront simplement à la fausseté de JS, sans restituer le bloc si property
est ''
ou '0'.
Handlebars will rend le bloc pour ''
et 0
, mais pas pour les autres valeurs fausses. Cela peut causer des problèmes lors de la migration des modèles.
Je pense que l’un des inconvénients mentionnés pour "Guidon" n’est plus vraiment valable.
Handlebars.Java nous permet maintenant de partager les mêmes langages de gabarit pour le client et le serveur, ce qui représente une grande victoire pour les grands projets comportant plus de 1 000 composants nécessitant un rendu sur le serveur pour le référencement.
Jetez un oeil à https://github.com/jknack/handlebars.Java
—En plus d'utiliser "this" pour le guidon et la variable imbriquée dans le bloc variable pour moustache, vous pouvez également utiliser le point imbriqué dans un bloc pour moustache:
{{#variable}}<span class="text">{{.}}</span>{{/variable}}