Les principales différences que j'ai vues sont:
- Guidons ajoute
#if
,#unless
,#with
et#each
- Le guidon ajoute des aides
- Les modèles de guidon sont compilés (la moustache peut aussi l'être)
- Le guidon prend en charge les chemins
- Permet l'utilisation de
{{this}}
blocs in (qui génère la valeur de chaîne de l'élément actuel) Handlebars.SafeString()
(et peut-être d'autres méthodes)- Le guidon est 2 à 7 fois plus rapide
- La moustache prend en charge les sections inversées (c.-à-d.
if !x ...
)
(Veuillez me corriger si je me trompe avec ce qui précède.)
Y a-t-il d'autres différences majeures qui me manquent?
Réponses:
Vous l'avez assez bien compris, mais les modèles de moustache peuvent également être compilés.
Il manque des assistants et des blocs plus avancés à la moustache car elle s'efforce d'être sans logique. Les assistants personnalisés du guidon peuvent être très utiles, mais finissent souvent par introduire de la logique dans vos modèles.
Moustache a de nombreux compilateurs différents (JavaScript, Ruby, Python, C, etc.). Guidons a commencé en JavaScript, maintenant il y a des projets comme django-guidon , handlebars.java , guidon-rubis , lightncandy (PHP) et guidon-ObjC .
la source
Avantages de la moustache:
Contre moustache:
Pros du guidon:
Contre guidon:
Source: Le rejet de modèles côté client: moustache, guidon, dust.js, etc.
la source
tr:nth-child(even)
ettr:nth-child(odd)
outr:nth-child(2n)
. Bien que ce ne soit qu'un exemple, je pense que (la plupart du temps) si quelque chose est difficile ou gênant avec Moustache, alors vous vous trompez; il y a un meilleur endroit pour ça.Une différence subtile mais significative réside dans la façon dont les deux bibliothèques abordent la portée. La moustache reviendra à la portée parent si elle ne trouve pas de variable dans le contexte actuel; Le guidon renverra une chaîne vide.
Ceci est à peine mentionné dans le GitHub README, où il y a une ligne pour cela:
Cependant, comme indiqué ici, il existe un indicateur pour que le guidon se comporte de la même manière que la moustache - mais cela affecte les performances.
Cela a un effet sur la façon dont vous pouvez utiliser des
#
variables comme conditionnelles.Par exemple, dans Moustache, vous pouvez faire ceci:
Cela signifie essentiellement "si la variable existe et est véridique, imprimez une plage contenant la variable". Mais dans le guidon, vous devrez soit:
{{this}}
place{{../variable}}
à- dire pour revenir à la portée pertinentevariable
valeur enfant dans l'variable
objet parentPlus de détails à ce sujet, si vous le souhaitez, ici .
la source
REMARQUE: cette réponse est obsolète. C'était vrai au moment de sa publication, mais ce n'est plus le cas.
Moustache a des interprètes dans de nombreuses langues, tandis que Handlebars est Javascript uniquement.
la source
Une autre différence entre eux est la taille du fichier:
Pour voir les avantages de performances de Handlebars.js, nous devons utiliser des modèles précompilés.
Source: Un aperçu des moteurs de création de modèles JavaScript
la source
Une différence plus subtile est le traitement des valeurs de falsification en
{{#property}}...{{/property}}
blocs. La plupart des implémentations de moustache obéiront simplement à la fausseté JS ici, ne rendant pas le bloc siproperty
est''
ou '0'.Guidons sera rendu le bloc pour
''
et0
, mais pas d' autres valeurs falsy. Cela peut entraîner des problèmes lors de la migration des modèles.la source
Je pense que l'un des inconvénients mentionnés pour "Guidon" n'est plus vraiment valable.
Handlebars.java nous permet désormais de partager les mêmes langages de modèle pour le client et le serveur, ce qui est une grande victoire pour les grands projets avec plus de 1000 composants qui nécessitent un rendu côté serveur pour le référencement
Jetez un œil à https://github.com/jknack/handlebars.java
la source
—En plus d'utiliser "this" pour le guidon et la variable imbriquée dans le bloc variable pour la moustache, vous pouvez également utiliser le point imbriqué dans un bloc pour la moustache:
la source