Bliss.js предоставляет мощный инструмент для работы с шаблонами, позволяя динамически создавать, модифицировать и управлять HTML-структурами прямо из JavaScript. В основе лежит система шаблонов, которые можно использовать повторно, связывать с данными и комбинировать между собой. Основной принцип работы — отделение структуры документа от логики и данных, что упрощает поддержку и масштабирование интерфейсов.
Шаблон в Bliss определяется с помощью специального метода
Bliss.template. Он принимает HTML-строку и возвращает
функцию, которая при вызове с объектом данных генерирует готовый
DOM-элемент.
const userTemplate = Bliss.template(`
<div class="user-card">
<h2>{{name}}</h2>
<p>Возраст: {{age}}</p>
<ul>
{{#each hobbies}}
<li>{{this}}</li>
{{/each}}
</ul>
</div>
`);
В этом примере используются двойные фигурные скобки
для вставки данных. Ключ {{name}} будет заменён на значение
свойства объекта, переданного в шаблон. Конструкция
{{#each hobbies}}...{{/each}} позволяет итерировать
массивы.
Функция-шаблон принимает объект с данными и возвращает DOM-узел:
const userData = {
name: "Анна",
age: 28,
hobbies: ["Чтение", "Путешествия", "Йога"]
};
const userElement = userTemplate(userData);
document.body.appendChild(userElement);
Ключевые моменты:
DocumentFragment.Bliss.js поддерживает использование подшаблонов, что позволяет строить сложные интерфейсы из небольших модульных блоков.
const hobbyTemplate = Bliss.template(`<li>{{hobby}}</li>`);
const userTemplate = Bliss.template(`
<div class="user-card">
<h2>{{name}}</h2>
<ul>{{#each hobbies}}{{> hobbyTemplate this}}{{/each}}</ul>
</div>
`);
const userElement = userTemplate({
name: "Иван",
hobbies: ["Фотография", "Рисование"]
});
Здесь {{> hobbyTemplate this}} означает вставку
другого шаблона, передавая текущий элемент массива в качестве
данных.
Bliss.js позволяет управлять отображением блоков с помощью условий:
const messageTemplate = Bliss.template(`
<div class="message">
{{#if isAdmin}}
<strong>Администратор</strong>
{{else}}
<span>Пользователь</span>
{{/if}}
: {{text}}
</div>
`);
{{#if condition}} ... {{/if}} — рендерит блок только
если условие истинно.{{else}} позволяет добавить альтернативное
содержимое.Bliss.js поддерживает подстановку данных в атрибуты HTML:
const linkTemplate = Bliss.template(`
<a href="{{url}}" target="_blank">{{text}}</a>
`);
const linkElement = linkTemplate({
url: "https://example.com",
text: "Перейти на сайт"
});
{{condition ? "classA" : "classB"}}.Bliss интегрирует шаблонизацию с привязкой событий:
const buttonTemplate = Bliss.template(`
<button oncl ick="{{handleClick}}">Нажать</button>
`);
const buttonElement = buttonTemplate({
handleClick: () => alert("Кнопка нажата")
});
Bliss.js умеет генерировать списки элементов на основе массива данных без ручного перебора:
const listTemplate = Bliss.template(`
<ul>
{{#each items}}
<li>{{this}}</li>
{{/each}}
</ul>
`);
const listElement = listTemplate({
items: ["Элемент 1", "Элемент 2", "Элемент 3"]
});
{{#each array}} ... {{/each}} создает повторяющиеся
элементы для каждого объекта массива.Шаблоны могут не только создавать новые элементы, но и заменять содержимое существующих:
const container = document.querySelector("#app");
container.innerHTML = "";
container.appendChild(userTemplate({ name: "Мария", age: 35, hobbies: ["Пение"] }));
Bliss.js хорошо сочетается с наблюдаемыми объектами:
let user = Bliss.observable({
name: "Олег",
age: 40
});
const userCard = userTemplate(user);
document.body.appendChild(userCard);
user.name = "Алексей"; // автоматически обновляет отображение
Bliss.observable делает объект реактивным.Bliss.js позволяет кэшировать скомпилированные шаблоны для ускорения рендеринга:
const cachedTemplate = Bliss.templateCache.get("userCard") || Bliss.template(`<div>{{name}}</div>`);
Bliss.templateCache.set("userCard", cachedTemplate);
Bliss.js предоставляет полный набор инструментов для гибкой, модульной и реактивной шаблонизации. Она позволяет создавать повторно используемые компоненты, управлять условиями, массивами и событиями, обеспечивая высокую производительность и чистую архитектуру фронтенда.