Mustache — это система веб-шаблонов . Она описывается как система без логики , поскольку в ней отсутствуют какие-либо явные операторы управления потокомif
, такие как и else
условные операторы или циклы for ; однако и циклы, и условная оценка могут быть достигнуты с помощью списков обработки тегов разделов и анонимных функций (лямбда-выражений). Она названа «Mustache» из-за интенсивного использования фигурных скобок , { }
которые напоминают усы, наклоненные вбок . Mustache используется в основном для мобильных и веб-приложений. [1] [2]
Реализации доступны на ActionScript , C++ , Clojure , CoffeeScript , ColdFusion , Common Lisp , Crystal , D , Dart , Delphi , Elixir , Erlang , Fantom , Go , Haskell , Io , Java , JavaScript , Julia , Lua , .NET , Objective-C , OCaml , Perl , PHP , Pharo , Python , R , Racket , Raku , Ruby , Rust , Scala , Smalltalk , Swift , Tcl , CFEngine и XQuery .
Mustache-1 был вдохновлен ctemplate и et, [3] и начался как дистрибутив GitHub в конце 2009 года. Первая версия шаблонизатора была реализована с помощью Ruby , запускающего тексты шаблонов YAML . Основные (сохраненные) принципы были следующими:
Входные данные могут быть классом , так что входные данные можно охарактеризовать как представление модель–представление–контроллер (MVC). Шаблон Mustache не делает ничего, кроме ссылок на методы в представлении (входные данные) . [3] Вся логика, решения и код содержатся в этом представлении , а вся разметка (например, выходной XML ) содержится в шаблоне . В контексте модель–представление–представитель (MVP): входные данные из MVP- представителя , а шаблон Mustache является MVP- представлением .
Данные JSON передаются в шаблоны Mustache, что приводит к выводу. Вот несколько примеров данных:
{ "имя" : "Мир" , "больше чем" : ">" }
Простой шаблон Mustache, такой как представленный ниже, в сочетании с указанными выше данными даст на выходе Hello World
.
Mustache HTML экранирует данные по умолчанию. Например, нижеследующее будет отображаться как 2 > 1
.
Чтобы отключить экранирование, используйте &
. Ниже будет отображено как 2 > 1
.
Ниже представлен шаблон с тегом section. Когда x
— логическое значение, тег section действует как условное выражение if . Когда x
— массив , он действует как цикл foreach .
Специальная переменная {{.}}
ссылается на текущий элемент при циклическом прохождении массива или на элемент, проверяемый в условном выражении.
Вы можете указать шаблону Mustache загрузить в него другой шаблон Mustache, используя >
символ .
Комментарии обозначены восклицательным знаком.
Подсветка синтаксиса доступна в Atom , Coda , Emacs , [4] TextMate , Vim и Visual Studio Code . [5]
Поддержка шаблона Mustache встроена во многие фреймворки веб-приложений (например, CakePHP ) [ требуется ссылка ] . Поддержка в JavaScript включает как клиентское программирование с использованием многих библиотек JavaScript и фреймворков Ajax, таких как jQuery , Dojo и YUI , так и серверный JavaScript с использованием Node.js и CommonJS .
Существует множество реализаций Mustache Engine , и все они соответствуют общей формальной спецификации (см. внешние ссылки), что для конечных пользователей приводит к общему синтаксису.
По состоянию на март 2011 года последняя версия SPEC_VERSION была 1.1.2. [6]
Все движки Mustache в архитектуре v1.X имеют метод рендеринга , класс Mustache_Compiler и класс Parser . [ необходима ссылка ]
Mustache вдохновил на создание многочисленных библиотек шаблонов JavaScript, которые отталкивались от изначальной простоты, чтобы добавить определенную функциональность или использовать ее. [ необходима цитата ]
Handlebars.js [7] описывается как:
Handlebars.js — это расширение языка шаблонов Mustache, созданное Крисом Ванстратом. Handlebars.js и Mustache — это языки шаблонов без логики, которые разделяют представление и код, как мы все знаем и должны быть. [8]
Handlebars отличается от своего предшественника тем, что в блочных выражениях (аналогичных разделам в Mustache) помощники позволяют использовать пользовательские функции посредством явного написанного пользователем кода для этого блока.