Skip to content

Instantly share code, notes, and snippets.

@ipetropolsky
Last active August 29, 2015 14:01
Show Gist options
  • Save ipetropolsky/5bb6f5bcadbc6a71045f to your computer and use it in GitHub Desktop.
Save ipetropolsky/5bb6f5bcadbc6a71045f to your computer and use it in GitHub Desktop.
HTML templates

Шаблоны в HTML

Требования

  • Объёмные куски HTML-кода.
  • Прозрачно для шаблонизатора (нет разницы между выводом в шаблон и в документ).
  • Расстановка компонентов в шаблонизаторе, инициализация во всём фрагменте сразу.
  • Простая подстановка плейсхолдеров.
  • Простое обновление фрагмента (установка свойств, атрибутов, значений, переключение видимости элементов).

<template>

Плюсы
  • Контент не парсится, доступен в виде текста и ноды.
Минусы
  • Не поддерживается в IE и Safari.
  • Сложно заполифиллить (из «кастомного» тега всплывают <tbody/tr/td> и т.д., CDATA в документе text/html допустимо только в XML-вставках math и svg.
Под вопросом
  • Возможен вариант с CDATA и Content-Type: application/xml.

<div class="template g-hidden">

Плюсы
  • Контент доступен в виде ноды вместе с тегом шаблона.
Минусы
  • Контент парсится и мешается в DOM, при первом использовании приходится убирать его оттуда, удалять лишние классы.
  • Контент может отличаться от исходника (в таблицу добавится tbody).
  • Шаблон для <td> приходится оборачивать в <tr> и <table>, чтобы не всплывало.
  • Нельзя поставить плейсхолдер в инлайн-стиль в IE (<span style="color: {{color}}"></span>).

<script type="text/html">

Плюсы
  • Контент не парсится, доступен в виде текста.
Минусы
  • Конфликтует с текущей системой инициализации компонентов (не работают компоненты внутри шаблона). Решается оборачиванием содержимого в комментарий и разворачиванием при использовании (<b:template> + Template.fromElement()).

require('text!templates/tpl-name')

Плюсы
  • Шаблоны отделены физически, не могут появиться в коде дважды.
Минусы

Для XML-зависимых шаблонов возможно дублирование XSL или дополнительная работа по вынесению общих для шаблона и страницы кусков кода, импортов, ключей, переменных.

Под вопросом
  • Дополнительные запросы, нужно оптимизировать.
  • Можно компилировать статичные шаблоны на этапе сборки в function(data) {}.
  • Можно использовать любые шаблонизаторы, компилирующиеся в function(data) {}, если прекомпайлить их при сборке.

См. также

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment