As principais diferenças que eu vi são:
- Guidão acrescenta
#if
,#unless
,#with
, e#each
- Guidão adiciona ajudantes
- Modelos de guidão são compilados (o bigode também pode ser)
- O guidão suporta caminhos
- Permite o uso de
{{this}}
em blocos (que gera o valor da string do item atual) Handlebars.SafeString()
(e talvez alguns outros métodos)- O guidão é 2 a 7 vezes mais rápido
- O bigode suporta seções invertidas (ie
if !x ...
)
(Corrija-me se estiver errado com o que foi dito acima.)
Faltam outras diferenças importantes?
handlebars.js
mustache
client-side-templating
templating-engine
Chad Johnson
fonte
fonte
Respostas:
Você acertou em cheio, no entanto, os modelos do Bigode também podem ser compilados.
O bigode está faltando ajudantes e os blocos mais avançados porque se esforça para não ter lógica. Os auxiliares personalizados do guidão podem ser muito úteis, mas muitas vezes acabam introduzindo lógica nos seus modelos.
O bigode tem muitos compiladores diferentes (JavaScript, Ruby, Python, C, etc.). O guiador começou em JavaScript, agora existem projetos como django-handlebars , handlebars.java , handlebars-ruby , lightncandy (PHP) e handlebars-objc .
fonte
Profissionais do bigode:
Contras do bigode:
Profissionais do guidão:
Guiador contras:
Fonte: o lançamento do modelo do lado do cliente: bigode, guidão, dust.js e mais
fonte
tr:nth-child(even)
etr:nth-child(odd)
outr:nth-child(2n)
. Embora seja apenas um exemplo, sinto que (na maioria das vezes) se algo é difícil ou estranho no Bigode, você está fazendo errado; há um lugar melhor para isso.Uma diferença sutil, mas significativa, está na maneira como as duas bibliotecas abordam o escopo. O bigode retornará ao escopo dos pais se não conseguir encontrar uma variável no contexto atual; O guidão retornará uma string em branco.
Isso é pouco mencionado no README do GitHub, onde há uma linha para isso:
No entanto, como observado lá, há uma bandeira para fazer o guidão se comportar da mesma maneira que o Bigode - mas isso afeta o desempenho.
Isso afeta a maneira como você pode usar
#
variáveis como condicionais.Por exemplo, no Bigode, você pode fazer isso:
Basicamente, significa "se a variável existir e for verdadeira, imprima uma extensão com a variável nela". Mas no guidão, você teria que:
{{this}}
vez disso{{../variable}}
para voltar ao escopo relevantevariable
valor filho dentro dovariable
objeto paiMais detalhes sobre isso, se você quiser, aqui .
fonte
NOTA: Esta resposta está desatualizada. Era verdade no momento em que foi postado, mas não é mais.
O bigode possui intérpretes em vários idiomas, enquanto o guidão é apenas Javascript.
fonte
Outra diferença entre eles é o tamanho do arquivo:
Para ver os benefícios de desempenho do Handlebars.js, precisamos usar modelos pré-compilados.
Fonte: Uma visão geral dos mecanismos de modelagem de JavaScript
fonte
Mais uma diferença sutil é o tratamento de valores falsos em
{{#property}}...{{/property}}
blocos. A maioria das implementações de bigodes apenas obedecem à falsidade de JS aqui, não renderizando o bloco seproperty
for''
ou '0'.Guidão irá tornar o bloco para
''
e0
, mas não outros valores Falsas. Isso pode causar alguns problemas ao migrar modelos.fonte
Eu sinto que um dos contras mencionados para "Guiador" não é mais válido.
O Handlebars.java agora nos permite compartilhar as mesmas linguagens de modelo para o cliente e o servidor, o que é uma grande vitória para projetos grandes com mais de 1000 componentes que exigem renderização no servidor para SEO
Dê uma olhada em https://github.com/jknack/handlebars.java
fonte
- Além de usar "this" para guidão e a variável aninhada no bloco variável para bigode, você também pode usar o ponto aninhado em um bloco para bigode:
fonte