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

Ось, що ми отримаємо в результаті:

Щоб те, що ми все робимо не здавалася містикою, перейдемо до теорії.

Типи тегів в Mustache

Теги в Mustache позначаються подвійними фігурними дужками, наприклад: # 123; # 123; person # 125; # 125 ;. # 123; # 123; # person # 125; # 125 ;. В обох прикладах ми говоримо про person як про ключі? або ключових тегах. Давайте поговоримо про різні типи тегів ..

змінні

Змінні - основний і найпростіший тип тега в Mustache. тег # 123; # 123; name # 125; # 125; в базовому шаблоні буде намагатися знайти ключ імені в поточному контексті. Якщо ключ імені не знайдений, батьківські контексти будуть перевірятися рекурсивно. У випадку досягнення верхній контекст і ключ імені так і не знайдений, нічого рендери не буде.

Значення змінних відображаються HTML-безпечним чином, тобто всі HTML теги замінюються на їх кодовані еквіваленти. Для відображення HTML-коду без змін використовуйте потрійні фігурні дужки, замість подвійних: # 123; # 123; # 123; name # 125; # 125; # 125; .

Також можна використовувати для скасування екранування змінної: # 123; # 123; name # 125; # 125 ;. Цим можна скористатися при зміні обмежувачів тегів (докладніше в розділі Зміна обмежувачів тегів).

За замовчуванням, відсутня змінна повертає порожній рядок. Якщо вас це не влаштовує, налаштуйте це правило в бібліотеці Mustache. Ruby версія Mustache підтримує підвищення виняток у цій ситуації, наприклад:

Задамо дані для цього шаблону. Зверніть увагу, що ми не стали вказувати в об'єкті властивість age. Зараз щось буде)

Результат нашої роботи наведено нижче. Ви помітили, що в консолі помилки немає, а там, де повинен бути вказаний вік Кріса - порожній рядок?

Секції Рендер блоки з текстом один, або більше разів, в залежності від значення ключа в поточному контексті. Секції відкриваються тегом і закривающтя тегом. Поведінка секції визначається значенням ключа: Секція відображається, якщо відповідна їй змінна має булевий тип і її значення дорівнює true. або ця змінна є непустою списком. Проілюструємо це на прикладі. Наш шаблон:

Дані для виведення:

непусті списки

Якщо секції відповідає непорожній список, то секція відображається для кожного елемента цього списку. При цьому контекстом для відображення вмісту секції стає черговий елемент. Напишіть такий простенький шаблон:

А для нього такі дані:

В результаті отримаємо:

Дані представити трохи більше понятнеей і більш компактно:

І отримати те ж саме.

Якщо значення є викликається об'єкт (функція або лямбда), він буде викликатися і передавати блок тексту. Рухаючись текст являє собою неотрендеренний блок символів. # 123; # 123; tags # 125; # 125; необхідно буде розширити - lambda зробить це самостійно. В цьому випадку ви можете реалізувати фільтри або кешування.

Візьмемо і напишемо такий шаблон:

І приготуємо для нього такі дані:

Неошібочние значення

Якщо значення є неошібочним, але не є списком, воно буде використано в якості контексту для одиночного рендеринга блоку.

Візьмемо ось такий шаблон:

Дані для виведення будуть такими:

Ось, що ми отримаємо на виході:

інвертовані секції

Інвертованою секцією називається секція, що відкривається тегом # 123; # 123; ^ імя_секціі # 125; # 125 ;. а закінчується - # 123; # 123; / імя_секціі # 125; # 125 ;. У той час як секції можуть бути використані для візуалізації тексту один, або кілька разів, в залежності від значення ключа, інвертовані ділянки можуть відображати текст, як тільки при зворотному значенню ключа. Тобто, вони будуть відображатися, якщо ключ не існує, є хибним, або список порожній.

Наведемо приклад, щоб вам було зрозуміліше. шаблон:

В результаті отримаємо:

Це буде отрендеріть наступним чином:

Відокремлені фрагменти

Відокремлені фрагменти відкриваються тегом # 123; # 123;<имя фрагмента}}. а закрываются - {{/имя фрагмента}} .

Відокремлені фрагменти Рендер під час виконання (на відміну від компіляції), тому можлива поява рекурсивних приватних значень. Таким способом уникають зациклення.

Для Mustache потрібно тільки це:

Чому? Тому що файл next_more.mustache успадковує розмір і методи запуску від зухвалої контексту.

Таким чином, ви можете розглядати приватні значення, такі як включення, обсяги імпорту, розширення шаблонів, вбудовані шаблони, або подшаблони, навіть незважаючи на те, що в буквальному сенсі це не так. Наприклад, розглянемо цей шаблон і відокремлений фрагмент:

Можна вважати поодиноким розширеним шаблоном:

Зміна обмежувачів тегів

Можна змінити обмежувачі тегів з # 123; # 123; # 125; # 125; на іншу послідовність символів, що не містить прогалини і символ =. Розглянемо наступний приклад:

Тут у нас є список з трьома пунктами. Перший пункт використовує стиль обмежувачів тегів за умовчанням ( # 123; # 123; # 125; # 125; ), Другий використовує вже інший стиль ( <% %> ), А третій повертається до вихідного стилю. Це може бути корисно для таких мов, як TeX. де подвійні фігурні дужки можуть виникнути в тексті і ними незручно буде користуватися для розмітки.

На цьому наше вивчення шаблонізатора Мustache підійшло до кінця. На останок залишаю вам невеликий приклад роботи c Мustache на той випадок, якщо щось залишилося незрозуміло. Успіхів!

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

  • unity
2D гра на Unity. Детальний керівництво. Частина 1