Gridstack.js предоставляет мощный API для динамического управления сеткой элементов на странице. Одним из ключевых аспектов является работа с событиями добавления элементов, что позволяет отслеживать момент появления новых виджетов, управлять их параметрами и интегрировать с бизнес-логикой.
addedСобытие added срабатывает каждый раз, когда в сетку
добавляется один или несколько элементов. Основные характеристики:
CustomEventgrid.addWidget) или через drag-and-drop.addedNodes, включающий добавленные элементы.Пример базового использования:
const grid = GridStack.init();
grid.on('added', function(event, items) {
items.forEach(item => {
console.log('Добавлен элемент:', item.el);
console.log('Размер:', item.width, 'x', item.height);
console.log('Позиция:', item.x, item.y);
});
});
grid.addWidget('<div class="grid-stack-item" gs-w="3" gs-h="2"><div class="grid-stack-item-content">Новый виджет</div></div>');
Особенности:
Добавление элементов в сетку часто сопровождается загрузкой данных с сервера. Gridstack позволяет передавать дополнительные атрибуты прямо при создании виджета:
const widgetData = {
x: 0,
y: 0,
w: 4,
h: 2,
content: 'Данные с сервера'
};
const widgetHTML = `<div class="grid-stack-item" gs-x="${widgetData.x}" gs-y="${widgetData.y}" gs-w="${widgetData.w}" gs-h="${widgetData.h}">
<div class="grid-stack-item-content">${widgetData.content}</div>
</div>`;
grid.addWidget(widgetHTML);
Событие added позволяет сразу обработать эти данные,
например, добавить обработчики событий или выполнить асинхронные
операции.
added
от change и addedNodeGridstack.js также имеет событие change, которое
срабатывает при любом изменении положения или размера элементов. Однако
added отличается следующими особенностями:
GridStackNode), а не только к их позициям.Для выборочной обработки добавленных элементов удобно использовать:
grid.on('added', function(event, items) {
items.filter(item => item.el.dataset.type === 'chart')
.forEach(chartItem => initializeChart(chartItem.el));
});
Gridstack.js поддерживает добавление элементов через drag-and-drop из
внешних источников. Для этого используется опция
acceptWidgets и соответствующий обработчик
added:
const grid = GridStack.init({
acceptWidgets: true
});
grid.on('added', (event, items) => {
items.forEach(item => {
console.log('Виджет перенесен в сетку:', item.el);
});
});
// Элемент вне сетки
const externalWidget = document.querySelector('#external-widget');
externalWidget.addEventListener('dragstart', function(e) {
e.dataTransfer.setData('text/plain', 'external-widget');
});
Преимущества:
added позволяет настроить виджет сразу после
попадания в сетку.Gridstack позволяет добавлять сразу несколько виджетов. Событие
added возвращает массив всех новых элементов, что удобно
для пакетной инициализации:
const widgets = [
{x:0, y:0, w:3, h:2, content:'Виджет 1'},
{x:3, y:0, w:3, h:2, content:'Виджет 2'},
];
widgets.forEach(w => {
grid.addWidget(`<div class="grid-stack-item" gs-x="${w.x}" gs-y="${w.y}" gs-w="${w.w}" gs-h="${w.h}">
<div class="grid-stack-item-content">${w.content}</div>
</div>`);
});
grid.on('added', (event, items) => {
console.log('Добавлено элементов:', items.length);
});
Рекомендации:
added централизованно,
чтобы избежать повторного навешивания обработчиков.added вместе с update() для
сохранения состояния сетки после массовых операций.added вызывается
после добавления элемента в DOM, но до
изменения его позиции пользователем.items содержит свойства x,
y, w, h, id и
el.grid.batchUpdate() / grid.commit()).Gridstack.js предоставляет гибкий механизм работы с событиями
добавления элементов, который подходит как для ручного создания
виджетов, так и для интеграции с внешними источниками и динамическими
данными. Использование события added позволяет полностью
контролировать процесс инициализации и настройки новых компонентов
сетки.