В Gridstack.js каждый элемент сетки (widget) проходит несколько этапов жизненного цикла: создание, инициализация, изменение параметров, динамическое обновление и удаление. Понимание этих этапов позволяет эффективно управлять поведением виджетов, обеспечивать отзывчивость интерфейса и оптимизировать производительность.
Виджеты создаются с помощью метода addWidget объекта
сетки. Синтаксис выглядит следующим образом:
const grid = GridStack.init();
grid.addWidget({
x: 0, y: 0, w: 4, h: 2, content: '<div>Новый виджет</div>'
});
Ключевые параметры:
x и y — координаты на сетке.w и h — ширина и высота виджета в
ячейках.content — HTML-контент, который будет помещён внутрь
виджета.Создание виджета автоматически вызывает внутренние процессы инициализации: вычисление положения, присвоение CSS-классов, установка обработчиков событий drag&drop и resize.
После добавления виджет можно настроить с помощью метода
update:
grid.update(widget, {w: 6, h: 3});
При обновлении параметров Gridstack:
Для сложной настройки можно использовать события жизненного цикла:
added — вызывается после добавления виджета.removed — вызывается перед удалением виджета.change — вызывается при изменении размеров или
положения.Пример подписки на событие:
grid.on('change', function(event, items) {
items.forEach(item => console.log('Изменился виджет', item));
});
Gridstack позволяет динамически добавлять, удалять и перемещать виджеты без перезагрузки страницы.
Удаление виджета:
grid.removeWidget(widget);
При удалении происходит:
Перемещение виджета:
grid.move(widget, 2, 1);
x и y задают новые координаты.Изменение размеров:
grid.resize(widget, 5, 4);
change для синхронизации внешнего
состояния.Для управления жизненным циклом часто требуется сохранить текущее расположение виджетов и восстановить его после обновления интерфейса:
let serialized = grid.save();
grid.load(serialized);
save() возвращает массив объектов с параметрами каждого
виджета (x, y, w, h,
id и др.).load() восстанавливает сетку из сохранённых данных,
пересоздавая виджеты с исходными размерами и положением.Gridstack предоставляет набор событий для контроля всех этапов:
| Событие | Когда вызывается |
|---|---|
added |
После добавления виджета |
removed |
Перед удалением виджета |
change |
После перемещения или изменения размеров |
dragstart |
В момент начала перетаскивания |
dragstop |
После завершения перетаскивания |
resizestart |
Начало изменения размеров |
resizestop |
Окончание изменения размеров |
Использование этих событий позволяет реализовать сложные сценарии, например:
Gridstack автоматически обновляет размеры виджетов при изменении
внутреннего контента, если включена опция autoResize. В
противном случае необходимо вручную вызывать:
grid.update(widget);
Это особенно важно при загрузке асинхронного контента (например, данных с API), чтобы сетка оставалась корректной и не создавались перекрытия.
Для больших сеток рекомендуется:
batchUpdate() при массовых изменениях для
снижения количества перерасчётов:grid.batchUpdate();
widgets.forEach(w => grid.update(w, {h: w.h + 1}));
grid.commit();
Gridstack.js обеспечивает полный контроль над жизненным циклом виджетов, позволяя управлять созданием, изменением, перемещением и удалением элементов, а также синхронизировать состояние с внешними данными и событиями интерфейса. Правильное использование методов, событий и оптимизаций позволяет создавать динамичные, отзывчивые и управляемые сеточные интерфейсы.