- Объёмные куски HTML-кода.
- Прозрачно для шаблонизатора (нет разницы между выводом в шаблон и в документ).
- Расстановка компонентов в шаблонизаторе, инициализация во всём фрагменте сразу.
- Простая подстановка плейсхолдеров.
- Простое обновление фрагмента (установка свойств, атрибутов, значений, переключение видимости элементов).
- Контент не парсится, доступен в виде текста и ноды.
- Не поддерживается в 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>
).
- Контент не парсится, доступен в виде текста.
- Конфликтует с текущей системой инициализации компонентов (не работают компоненты внутри шаблона). Решается оборачиванием содержимого в комментарий и разворачиванием при использовании (
<b:template>
+Template.fromElement()
).
- Шаблоны отделены физически, не могут появиться в коде дважды.
Для XML-зависимых шаблонов возможно дублирование XSL или дополнительная работа по вынесению общих для шаблона и страницы кусков кода, импортов, ключей, переменных.
- Дополнительные запросы, нужно оптимизировать.
- Можно компилировать статичные шаблоны на этапе сборки в
function(data) {}
. - Можно использовать любые шаблонизаторы, компилирующиеся в
function(data) {}
, если прекомпайлить их при сборке.