Gridstack.js предоставляет мощный набор инструментов для управления сеткой виджетов на веб-странице. Ключевым аспектом работы с библиотекой является получение информации о текущем состоянии сетки — положении и размере элементов, их идентификаторах и других свойствах. Методы получения данных позволяют динамически анализировать структуру и использовать эти данные для сохранения, синхронизации или генерации интерфейсов.
save()Метод save() позволяет получить текущее состояние всех
виджетов в сетке в виде массива объектов. Каждый объект содержит
основные параметры виджета:
x — горизонтальная позиция в сеткеy — вертикальная позицияwidth — ширина в ячейках сеткиheight — высота в ячейках сеткиid — идентификатор элемента (если задан)content — HTML-контент или пользовательские данныеПример использования:
const grid = GridStack.init();
const layoutData = grid.save();
console.log(layoutData);
Результат:
[
{ "x":0, "y":0, "width":2, "height":2, "id":"widget1" },
{ "x":2, "y":0, "width":4, "height":1, "id":"widget2" }
]
save() полезен для сериализации состояния
сетки перед сохранением на сервер или в localStorage.
saveAsJSON(options)Расширенная версия метода save() позволяет указать
опции, определяющие, какие данные включать в вывод. Например:
serializeGrid — включать свойства самой сеткиserializeNode — включать дополнительные
пользовательские свойства для каждого узлаПример:
const layoutJSON = grid.saveAsJSON({serializeGrid: true});
console.log(JSON.stringify(layoutJSON, null, 2));
Такой подход удобен для гибкой настройки формата данных, особенно при интеграции с бекендом.
getGridItems()Метод getGridItems() возвращает все DOM-элементы,
являющиеся виджетами сетки. Он не возвращает данные о позициях и
размерах напрямую, но позволяет работать с узлами через стандартные
DOM-операции или методы Gridstack.js:
const items = grid.getGridItems();
items.forEach(item => {
console.log(item.dataset.gsX, item.dataset.gsY);
});
Каждый элемент содержит атрибуты data-gs-x,
data-gs-y, data-gs-width,
data-gs-height, что позволяет получить информацию без
вызова методов save().
getNode(el)Метод getNode(el) возвращает объект узла сетки,
соответствующий переданному DOM-элементу или jQuery-объекту. Этот объект
включает:
x, y, width,
heightid или другие пользовательские свойстваПример:
const node = grid.getNode(document.getElementById('widget1'));
console.log(node.x, node.y, node.width, node.height);
Используется для получения детальной информации об отдельном виджете, чтобы менять состояние программно или сохранять конкретный элемент.
Каждый виджет сетки хранит свои координаты в атрибутах DOM-элемента:
data-gs-xdata-gs-ydata-gs-widthdata-gs-heightПример чтения этих значений без использования API:
const widget = document.querySelector('#widget1');
const x = parseInt(widget.getAttribute('data-gs-x'), 10);
const y = parseInt(widget.getAttribute('data-gs-y'), 10);
const width = parseInt(widget.getAttribute('data-gs-width'), 10);
const height = parseInt(widget.getAttribute('data-gs-height'), 10);
Этот метод полезен, когда нужно быстро получить данные без инициализации объекта Gridstack.
Gridstack.js позволяет хранить кастомные свойства
внутри объектов узлов. При использовании save() или
saveAsJSON() можно включать эти свойства:
grid.addWidget({
id: 'widget3',
x: 1,
y: 2,
width: 3,
height: 2,
myData: {type: 'chart', color: 'blue'}
});
const data = grid.save();
console.log(data[0].myData); // {type: 'chart', color: 'blue'}
Использование дополнительных свойств облегчает интеграцию с бизнес-логикой приложения и хранение метаданных.
forEachNode()Метод forEachNode(callback) позволяет итерировать все
узлы сетки и выполнять операции на каждом виджете:
grid.engine.nodes.forEach(node => {
console.log(`Widget ${node.id} at (${node.x}, ${node.y})`);
});
Или с использованием метода Gridstack.js:
grid.engine.nodes.forEach(node => callback(node));
Это позволяет получать данные по одному узлу, изменять их и синхронизировать с другими компонентами интерфейса.
save() и saveAsJSON() —
получение полной структуры сетки в формате объектовgetGridItems() — доступ к
DOM-элементам виджетовgetNode(el) — получение информации об
отдельном виджетеdata-gs-* атрибуты — быстрый способ
чтения координат и размеровforEachNode() — обход и обработка всех
узлов сеткиЭти методы позволяют гибко управлять состоянием сетки, интегрировать данные с сервером и создавать динамичные интерфейсы на основе Gridstack.js.