Gridstack.js использует концепцию сетки с виджетами,
каждый из которых представлен объектом с набором свойств:
x, y, width, height,
id и дополнительными атрибутами. Десериализация данных
позволяет восстановить состояние сетки из JSON или
другого формата данных, что критично для сохранения пользовательских
настроек и динамического создания интерфейсов.
Стандартный формат объекта для Gridstack выглядит так:
[
{ "x": 0, "y": 0, "width": 2, "height": 2, "id": "widget1", "content": "Содержимое виджета 1" },
{ "x": 2, "y": 0, "width": 2, "height": 1, "id": "widget2", "content": "Содержимое виджета 2" }
]
Ключевые поля:
load и
десериализацияGridstack предоставляет метод load,
позволяющий восстановить сетку из массива объектов:
const grid = GridStack.init();
const serializedData = [
{x: 0, y: 0, w: 3, h: 2, content: "<div>Виджет A</div>"},
{x: 3, y: 0, w: 2, h: 3, content: "<div>Виджет B</div>"}
];
grid.load(serializedData);
Особенности работы метода load:
content.Для более сложных сценариев используется комбинация
removeAll() и addWidget():
grid.removeAll();
serializedData.forEach(item => {
const node = {
x: item.x,
y: item.y,
w: item.width,
h: item.height,
id: item.id
};
grid.addWidget(`<div id="${item.id}">${item.content}</div>`, node);
});
Преимущества такого подхода:
Если десериализуемый JSON содержит неполные или избыточные данные, необходимо:
x, y, width,
height.const node = {
x: item.x ?? 0,
y: item.y ?? 0,
w: item.width ?? 1,
h: item.height ?? 1,
id: item.id ?? `widget-${Date.now()}`
};
addWidget.При загрузке данных с сервера или из локального хранилища полезно использовать асинхронную обработку:
async function loadGridData(grid, url) {
const response = await fetch(url);
const data = await response.json();
grid.load(data);
}
Gridstack.js позволяет создавать виджеты с вложенными сетками. Для десериализации таких структур важно:
GridStack.init() для его внутренних виджетов.serializedData.forEach(item => {
const el = grid.addWidget(`<div>${item.content}</div>`, {x: item.x, y: item.y, w: item.width, h: item.height});
if (item.children) {
const nestedGrid = GridStack.init({staticGrid: false}, el);
nestedGrid.load(item.children);
}
});
Для сеток с десятками и сотнями виджетов:
float: false) перед загрузкой.grid.batchUpdate(); // начало пакетного обновления
grid.load(largeDataSet);
grid.commit(); // применение изменений
batchUpdate + commit позволяет
обновлять состояние сетки разом, повышая
производительность при больших данных.Десериализация в Gridstack.js — это гибкий механизм восстановления
состояния интерфейса из структурированных данных. Правильная организация
данных, обработка нестандартных случаев и использование методов
load, addWidget и batchUpdate
позволяет создавать динамичные, масштабируемые и легко управляемые сетки
с виджетами, полностью управляемые через JSON.