Основные различия, которые я видел:
- Рули добавляет
#if
,#unless
,#with
, и#each
- Руль добавляет помощников
- Шаблоны руля скомпилированы (усы тоже могут быть)
- Рули поддерживает пути
- Позволяет использовать
{{this}}
блоки in (которые выводят строковое значение текущего элемента) Handlebars.SafeString()
(и, возможно, некоторые другие методы)- Рули в 2-7 раз быстрее
- Усы поддерживают перевернутые секции (то есть
if !x ...
)
(Пожалуйста, поправьте меня, если я ошибаюсь с вышесказанным.)
Есть ли другие важные различия, которые я пропускаю?
Ответы:
Вы в значительной степени прибили это, однако шаблоны Усов также могут быть скомпилированы.
Усу не хватает помощников и более продвинутых блоков, потому что он стремится быть логикой. Пользовательские помощники Handlebars могут быть очень полезны, но часто в конечном итоге вводят логику в ваши шаблоны.
Усы имеют много разных компиляторов (JavaScript, Ruby, Python, C и т. Д.). Рули начали в JavaScript, теперь есть проекты , как Джанго-рули , handlebars.java , руль-рубин , lightncandy (PHP) и рули-ObjC .
источник
Усы плюсы:
Усы минусы:
Рули плюсы:
Минусы руля:
Источник: шаблонное выбрасывание на стороне клиента: усы, руль, dust.js и многое другое
источник
tr:nth-child(even)
иtr:nth-child(odd)
илиtr:nth-child(2n)
. Хотя это всего лишь пример, я чувствую, что (в большинстве случаев) если с усами что-то сложно или неловко, то вы делаете это неправильно; есть лучшее место для этого.Одно тонкое, но существенное отличие состоит в том, как две библиотеки подходят к области видимости. Усы вернутся к родительской области, если не смогут найти переменную в текущем контексте; Рули вернут пустую строку.
Это едва упоминается в GitHub README, где для этого есть одна строка:
Однако, как уже отмечалось, есть флаг, который заставляет руль вести себя так же, как усы - но это влияет на производительность.
Это влияет на то, как вы можете использовать
#
переменные в качестве условных выражений .Например, в Усы вы можете сделать это:
Это в основном означает «если переменная существует и является правдивой, выведите диапазон с переменной в ней». Но в Handlebars вы должны либо:
{{this}}
вместо{{../variable}}
чтобы вернуться в соответствующую областьvariable
значение в родительскомvariable
объектеПодробнее об этом, если вы хотите их, здесь .
источник
ПРИМЕЧАНИЕ. Этот ответ устарел. Это было верно в то время, когда это было отправлено, но больше не.
Усы имеют переводчиков на многих языках, в то время как Handlebars - только Javascript.
источник
Еще одно различие между ними - размер файла:
Чтобы увидеть преимущества производительности Handlebars.js, мы должны использовать предварительно скомпилированные шаблоны.
Источник: обзор шаблонизаторов JavaScript
источник
Еще одно тонкое отличие - обработка ложных значений в
{{#property}}...{{/property}}
блоках. Большинство реализаций усов будут просто подчиняться ложности JS здесь, а не отображать блок, еслиproperty
равен''
или '0'.Рули будут отображать блок для
''
и0
, но не для других ложных значений. Это может вызвать некоторые проблемы при переносе шаблонов.источник
Я чувствую, что один из упомянутых минусов для «руля» больше не действителен.
Handlebars.java теперь позволяет нам совместно использовать одни и те же языки шаблонов для клиента и сервера, что является большой победой для крупных проектов с более чем 1000 компонентами, которые требуют серверного рендеринга для SEO
Взгляните на https://github.com/jknack/handlebars.java
источник
—В дополнение к использованию «this» для руля и вложенной переменной в блоке переменных для усов, вы также можете использовать вложенную точку в блоке для усов:
источник