FAST Element предоставляет мощные механизмы для создания веб-компонентов с декларативным описанием структуры и реактивной логикой. Одной из ключевых возможностей является динамическая генерация шаблонов, которая позволяет формировать DOM на основе данных и условий во время выполнения, сохраняя высокую производительность и удобочитаемость кода.
В FAST Element шаблон определяется с помощью функции
html из пакета @microsoft/fast-element. Любая
часть шаблона может быть связана с реактивными свойствами класса
компонента через биндинги. Биндинги бывают следующих
типов:
Текстовые биндинги: \${property}
Используются для вставки значений свойств в текстовый контент
элементов.
import { FASTElement, html } from "@microsoft/fast-element";
const template = html<MyElement>`
<p>Привет, ${x => x.name}!</p>
`;
class MyElement extends FASTElement {
name = "Мир";
}Атрибутные биндинги:
<div class="${x => x.className}"></div>
Позволяют динамически задавать классы, стили и другие атрибуты.
Объектные биндинги:
<input :value="${x => x.value}"> Используются для
двустороннего связывания свойств с DOM-атрибутами.
FAST Element поддерживает условное рендеринг через директиву
when. Она позволяет включать или исключать фрагменты DOM в
зависимости от условий.
import { when } from "@microsoft/fast-element";
const template = html<MyElement>`
${when(x => x.isLoggedIn, html<MyElement>`<p>Добро пожаловать, ${x => x.user}!</p>`)}
`;
when — функция, возвращающая
булево значение.Для создания списков используется директива repeat,
которая позволяет динамически рендерить коллекции:
import { repeat } from "@microsoft/fast-element";
const template = html<MyElement>`
<ul>
${repeat(x => x.items, html<Item>`<li>${i => i.label}</li>`)}
</ul>
`;
repeat — функция, возвращающая массив
элементов.repeat автоматически отслеживает изменения в массиве и
обновляет DOM без полной перерисовки.В FAST Element можно создавать элементы с полностью динамическим
содержимым, комбинируя when, repeat и обычные
биндинги:
const template = html<MyElement>`
${repeat(x => x.sections, html<Section>`
<section>
<h2>${s => s.title}</h2>
${when(s => s.showContent, html<Section>`<p>${s => s.content}</p>`)}
</section>
`)}
`;
Такой подход обеспечивает максимальную гибкость, позволяя строить сложные интерфейсы с вложенной динамикой и условным отображением.
FAST Element позволяет использовать функции в биндингах, что открывает возможность динамического изменения контента на основе сложной логики:
const template = html<MyElement>`
<p>${x => x.computeMessage()}</p>
`;
class MyElement extends FASTElement {
value = 10;
computeMessage() {
return this.value > 5 ? "Значение больше 5" : "Значение меньше или равно 5";
}
}
Методы компонента автоматически пересчитываются при изменении реактивных свойств, что делает динамическую генерацию максимально гибкой.
FAST Element позволяет создавать повторно используемые шаблонные функции, которые можно применять в разных местах компонента или проекта:
const cardTemplate = (item) => html`
<div class="card">
<h3>${() => item.title}</h3>
<p>${() => item.description}</p>
</div>
`;
const template = html<MyElement>`
${repeat(x => x.cards, cardTemplate)}
`;
Такой подход уменьшает дублирование кода и облегчает поддержку динамических интерфейсов.
when и repeat минимизируют
манипуляции с DOM, обновляя только изменившиеся части.Динамическая генерация шаблонов в FAST Element обеспечивает мощный набор инструментов для построения реактивных, масштабируемых и высокопроизводительных веб-компонентов. Сочетание директив, реактивных свойств и шаблонных функций позволяет создавать интерфейсы любой сложности с минимальными затратами на обновление DOM и поддержку кода.