Декларативный шаблонизатор
Вы можете переопределить или расширить шаблоны отвечающие за генерацию отдельных частей вывода: HTML-тега, HTML-атрибутов или содержимого узла. Например:
block('link')({ tag: 'span' });
// Этот шаблон определяет тег для всех блоков `link`.
// Режим `tag` может быть переопределен по произвольному условию.
block('link').match((node, ctx) => ctx.url)({ tag: 'a' });
// Этот шаблон определяет тег `a` только в случае если в блоке `link` есть поле `url`.
// Иначе тег будет `span`, как определено в предыдущем шаблоне.
Для каждого узла входного дерева данных шаблонизатор проверяет условие на соответствие шаблону.
block('list')({ tag: 'ul' });
block('item')({ tag: 'li' });
Для каждого блока list
выполнится шаблон про тег ul
. Для каждого блока
item
— шаблон про тег li
.
Например для входных данных:
{
block: 'list',
content: [
{
block: 'item',
content: {
block: 'list',
content: [
{ block: 'item', content: 'CSS' },
{ block: 'item', content: 'HTML' }
]
}
},
{
block: 'item',
content: {
block: 'list',
content: [
{ block: 'item', content: 'JS' }
]
}
}
]
}
Результат шаблонизации:
<ul class="list">
<li class="item">
<ul class="list">
<li class="item">CSS</li>
<li class="item">HTML</li>
</ul>
</li>
<li class="item">
<ul class="list">
<li class="item">JS</li>
</ul>
</li>
</ul>
Использовать декларативные шаблоны так же просто как и CSS для HTML.
По предыдущему примеру вы могли заметить, что bem-xjst автоматически обходит
входные данные заглядывая в поле content
.
Встроенное поведение позволяет вам рендерить данные без шаблонов. Для данных из примера выше вы получите вот такой результат по умолчанию:
<div class="list">
<div class="item">
<div class="list">
<div class="item">CSS</div>
<div class="item">HTML</div>
</div>
</div>
<div class="item">
<div class="list">
<div class="item">JS</div>
</div>
</div>
</div>
Как видите, большую часть работы шаблонизатор сделал за вас. Осталось только добавить несколько шаблонов для тегов и ваш HTML будет выглядеть вполне прилично.
Шаблонизатор и сами шаблоны используют чистый JavaScript, что позволяет вам использовать всю мощь JS-инфраструктуры: автоматические валидаторы кода и инструменты вроде JSHint/ESLint.
Вы можете использовать bem-xjst в любом браузере или на любой виртуальной машине JavaScript. Мы поддерживаем Node.js v0.10 и выше.
Читайте документацию:
- О bem-xjst
- Быстрый старт
- API: использование, сигнатура и описание методов
- Формат входных данных: BEMJSON
- Шаблоны: синтаксис
- Шаблоны: контекст
- Runtime: как выбираются и применяются шаблоны
Online demo позволяет вам делится ссылкой на примеры шаблонов и входных данных.
Вам потребуется Node.js v0.10 или старше и npm.
npm install bem-xjst
Скопируйте пример из документации или смотрите простой пример в репозитории. Затем прочитайте документацию и начинайте экспериментировать с шаблонизатором.
Да. Проекты компаний Яндекс и Альфа-Банк, а так же оперсорс проекты основанные на bem-core и bem-components, которые тоже используют bem-xjst.
См. readme.
См. readme.
См. readme.
- Документация на bem.info
- Changelog и описание релизов
- Гайд для контрибьюторов
- Онлайн демо (you can share code snippets)
- Twitter аккаунт: @bemxjst
- Гайд по миграции для всех мажорных версий