search
1.7 Поддержка Smart-компонентов
Назначение
SFLoaderPlugin и модуль ComponentLoader реализуют полную поддержку Smart-компонентов — это самостоятельные
элементы, которые:
- загружаются динамически (JS/CSS);
- имеют отдельный HTML-шаблон;
- могут содержать собственные свойства, события и стили;
- управляются независимо от обычных компонентов.
Особенности Smart-компонентов
- Размещаются внутри тега
<smart ... />; - Имеют атрибут
name, по которому определяется тип компонента; - Поддерживают атрибуты:
data,property,events,modify; - Атрибуты сериализуются, декодируются и передаются как объект.
Обработка инициализации
-
Поиск компонентов в DOM (
initComponents()):- Ищет все
<smart>элементы; - Парсит атрибуты, назначает уникальный ID;
- Клонирует оригинальную ноду и сохраняет в
smartTemplates.
- Ищет все
-
Добавление стилей и скриптов:
-
appendStyle()— подгружает CSS по пути:
/simai/asset/simai.framework/sf5.master/smart/<name>/css/<name>.css -
appendScript()— загружает JS и создает экземпляр компонента: /smart/<name>/js/<name>.js
-
-
Рендеринг:
- Метод
drawComponent()создаёт инстанс Smart-компонента (new component.item()), добавляет его в список и вставляет в DOM.
- Метод
Загрузка и кеширование шаблонов
Smart-компоненты используют HTML-шаблоны, которые:
- получаются с сервера один раз (при первом использовании);
- сохраняются в
CacheManager.cachedTemplates; - затем сжимаются через
compressToUTF16()и записываются вlocalStorage.
Хранилище в localStorage
localStorage["SF_SMART_GZIP"] = compressToUTF16(JSON.stringify(this.cachedTemplates));
Загрузка из localStorage
const gzip = localStorage.getItem('SF_SMART_GZIP');
this.gZipReady = JSON.parse(decompressFromUTF16(gzip));
Также используется объект cachedFakeContent, в котором сохраняются подготовленные HTML-блоки (заглушки), готовые к
вставке.
Вспомогательные методы CacheManager
| Метод | Назначение |
|---|---|
| setCachedFakeContent(obj) | Сохраняет fake-шаблон компонента |
| setCachedTemplates(obj) | Объединяет и сохраняет шаблоны |
| setLocalZipReady() | Сохраняет шаблоны в localStorage (сжатые) |
| getLocalZipReady() | Восстанавливает шаблоны из localStorage |
| setCookie(obj, name) | Сохраняет данные в cookie (опционально) |
| getCookie(name) | Читает значение cookie |
Когда используется кэш
- Если шаблоны уже были загружены ранее и сохранены в
localStorage, повторный запрос не выполняется; - Если
CacheManager.gZipReadyсодержит нужный шаблон — он берётся из него и вставляется без запроса к серверу; - Это позволяет загружать даже Smart-компоненты без интернета, если шаблоны уже закешированы.
Преимущества Smart-компонентов
- Чётко отделённые: каждый компонент независим;
- Удобная система шаблонов и параметров;
- Поддержка динамической вставки в DOM;
- Сжатое и быстрое кеширование в localStorage;
- Быстрое восстановление интерфейса при повторной инициализации.