Dom7 используется в экосистеме Framework7 как облегчённый jQuery-подобный инструмент для работы с DOM. При интеграции с Router важной особенностью становится то, что Dom7 взаимодействует не только с существующим DOM, но и с динамически создаваемыми страницами, компонентами и маршрутами. Это требует корректного подключения обработчиков событий, поиска элементов и освобождения ресурсов при переходах между представлениями.
Router Framework7 формирует содержимое страниц на лету. При каждом переходе создаётся новый набор DOM-элементов, удаляемый при возврате назад или при замене текущего маршрута. Dom7 выполняет поиск и манипуляции уже после того, как Router полностью вставил страницу в DOM. В противном случае выборка будет пустой.
app.router.navigate('/details/');
$$(document).once('page:afterin', '.page[data-name="details"]', () => {
$$('.details-title').text('Информация о сущности');
});
Router создаёт отдельные контейнеры для каждой страницы. Использование глобальных селекторов приводит к конфликтам при повторных загрузках одинаковых страниц. Dom7 позволяет ограничить выборку контекстом:
$$(pageEl).find('.item');
Контекстный поиск гарантирует работу с элементами текущего маршрута и предотвращает ошибочную модификацию элементов в скрытых или удалённых страницах.
Router обрабатывает жизненный цикл страницы. Dom7-обработчики следует
назначать на этапах page:init, page:mounted
либо page:afterin, чтобы обеспечить доступность элементов.
Важный момент — избегать повторной регистрации одних и тех же
обработчиков при повторных переходах:
$$(document).on('page:init', '.page[data-name="profile"]', (e) => {
const page = e.detail;
$$(page.el).find('.save-btn').on('click', onSave);
});
При использовании once снижается риск утечек:
$$(document).once('page:init', '.page[data-name="profile"]', (e) => {
...
});
Router удаляет DOM-узлы страницы, но обработчики, привязанные
глобально, продолжают жить. Dom7 предоставляет метод .off()
для отписки. Если логика требует освобождения ресурсов при уходе со
страницы, применяется событие page:beforeout либо
page:beforeremove:
$$(document).on('page:beforeremove', '.page[data-name="profile"]', () => {
$$(document).off('click', onSave);
});
При анимациях Router временно удерживает старую страницу, пока новая
не будет полностью показана. Dom7-манипуляции с элементами должны
учитывать этот промежуток. Изменение свойств новой страницы выполняется
в page:afterin, а логика скрытия старой страницы — в
page:afterout. Это исключает визуальные артефакты и
несогласованное состояние DOM.
Router позволяет подставлять данных в шаблон страницы. Dom7 выступает здесь инструментом для пост-обработки результата: применение интерактивных элементов, стилизация, внедрение дополнительных узлов. Важно избегать вмешательства в шаблон на этапе до рендера, чтобы не нарушить логику Router.
Работа с Dom7 внутри Router влияет на производительность при множественных переходах. Главные меры:
.once и делегирования событий;page:init.Смешанное использование делегирования и контекста обеспечивает наименьший объём кода и минимальные риски утечек.
Router поддерживает асинхронный рендеринг страниц (async routes). В
этом случае Dom7-манипуляции возможны только после завершения загрузки и
вставки контента. Использование resolve и
reject маршрута гарантирует последовательность: сначала
загрузка данных, затем вставка HTML, затем инициализация через Dom7.
При использовании компонентного подхода Router создаёт экземпляры страниц-компонентов. Dom7 применяют для прямой работы с DOM-узлами компонента, но логика должна оставаться внутри жизненного цикла компонента, а не глобально. Разделение ответственности предотвращает конфликты при множественных экземплярах одной и той же страницы.
Dom7-селекторы, привязанные к элементам страницы, создаваемой Router, формируют локальный контекст. Это позволяет добиться инкапсуляции поведения страницы и избежать влияния на остальные страницы, что особенно критично при таб-интерфейсах и вложенных маршрутах.
Во вложенных маршрутах Router может создавать несколько активных страниц. Dom7-селекторы обязаны учитывать ближайший контейнер:
$$(page.routerEl).find('.btn');
Данный подход исключает выбор элементов дочерних маршрутов при работе с родительским.
Интеграция Dom7 и Router базируется на корректной привязке к жизненному циклу страниц, контекстных селекторах, безопасной инициализации событий и освобождении ресурсов. Dom7 обеспечивает гибкую манипуляцию DOM, а Router определяет правила существования страниц. Совместное использование даёт возможность создавать интерактивные интерфейсы без излишних издержек, при условии соблюдения описанных принципов.