Mustache шаблонизатор

Mustache – простой шаблонизатор с минимумом логики, но набирающий все большую популярность и добавляющий в свои ряды новые языки, которые его поддерживают(Ruby, JavaScript, Python, Erlang, PHP, Perl, Objective-C, Java, .NET, Android, C++, Go, Lua, ooc, ActionScript, ColdFusion, Scala, Clojure, Fantom, CoffeeScript, D, node.js.)

Я приведу пример как можно использовать Mustache вместе с JavaScript.

Для старта нам необходимо выкачать Mustache, и создать себе html-файл для экспериментов, в который подключить библиотеку.

Разберем пример с офсайта. Структура данных:

var  data = {
        "header": "Colors",
        "items": [
            {"name": "red", "first": true, "url": "#Red"},
            {"name": "green", "link": true, "url": "#Green"},
            {"name": "blue", "link": true, "url": "#Blue"}
        ],
        "empty": false
    };

(добавим его в javascript тег к нашей html страничке)

и сам шаблон Mustache:

<h1>{{header}}</h1>
{{#bug}}
{{/bug}}

{{#items}}
  {{#first}}
    <li><strong>{{name}}</strong></li>
  {{/first}}
  {{#link}}
    <li><a href="{{url}}">{{name}}</a></li>
  {{/link}}
{{/items}}

{{#empty}}
  <p>The list is empty.</p>
{{/empty}}

Для простоты первого примера поместим весь этот шаблон в строковую переменную template.

осталось применить метод Mustache.to_html():

console.log(Mustache.to_html(template, data));

Вот тут можно поиграть с исходным кодом.

Расширим этот вариант и сделаем его полным аналогом офсайта: т.е. чтобы можно было подавать данные и шаблон через textarea, вот так.

С песочницей разобрались, переходим рассмотрению самой библиотеки. Мы уже опробовали основной метод Mustache.to_html, который имеет следующий синтаксис:

to_html(template, data, partials, send)

Но! Этот метод, как оказалось, уже является deprecated и вместо него стоит использовать render():

render(template, data, partials)
template - шаблон (string)
data - данные подставляемые в шаблон (object)
partials - массив подшаблонов, также динамически собираемых

Остальные методы, которые не так реже используются это:

clearCache() - для очистки кеша
compile(template, tags) - компилирует шаблон в выполняемую функцию
compilePartial(name, template, tags) - тоже для подшаблонов

Как видим: методов у mustache.js совсем не много. Поэтому продолжим разбирать структуру шаблонов.

Возможны следующие встраивания в html:

переменная(variable)

{{variable}} – экранированный вывод переменной

{{{variable}}} – не экранированный вывод переменной

{{variable.property}} – обращение к свойству объекта

СекЦИЯ(SECtion)

Секция представляет из себя блок заключенные между тегами {{#sectionname}} и {{/sectionname}}

Поведение секции зависит от переданного в нее значения:

  • true/false – ведет себя как оператор if: отображает блок только в случае, когда было передано true.
  • список значений – аналог цикла с поставлением значений
  • функция – получает 2 значения: текст блока и рендер метод, и заменяет блок своим результатом

подшаблон(partial)

имеют синтаксис {{> partialname}} и подставляют не переменную, а целый шаблон.

комментарий(comment)

{{! comment}} – вывод комментария

 

Более подробно можно почитать:

Относительно субъективные сравнительные тесты с другими шаблонизаторами можно посмотреть тут.