Метод refreshItems является одной из ключевых функций в
библиотеке Muuri, предназначенной для динамического
управления сетками и сеточными элементами на веб-странице. Его основное
назначение — синхронизация внутреннего состояния сетки с фактическими
DOM-элементами после изменений структуры или содержимого элементов.
refreshItems используется для:
layout(), sort() и filter()
работали корректно.Важно: без вызова
refreshItemsизменения в DOM не всегда корректно отражаются в сетке.
grid.refreshItems(items, keepSort);
Параметры:
items (необязательный) — массив элементов
или объектов Muuri, которые требуется обновить. Если не указан,
обновляются все элементы сетки.
keepSort (необязательный, по умолчанию
false) — логическое значение, определяющее, сохранять
ли текущий порядок сортировки элементов.
true — порядок сортировки сохраняется.false — порядок может быть пересчитан в соответствии с
внутренними данными сетки.Возвращаемое значение: Метод возвращает массив объектов Muuri, соответствующих обновлённым элементам.
Обновление всех элементов сетки:
const grid = new Muuri('.grid');
grid.refreshItems().layout();
В этом примере после вызова refreshItems метод
layout() пересчитывает позиции всех элементов и анимирует
изменения.
Обновление конкретного элемента:
const grid = new Muuri('.grid');
const itemToUpdate = document.querySelector('.item-to-update');
grid.refreshItems([itemToUpdate]).layout();
Использование массива элементов позволяет обновлять только часть сетки, экономя ресурсы при больших коллекциях.
С сохранением сортировки:
grid.refreshItems(null, true).layout();
С помощью keepSort = true можно обновить размеры
элементов без изменения их текущего порядка.
При вызове refreshItems происходит:
Сбор актуальных размеров элементов через
getBoundingClientRect().
Пересчёт внутреннего состояния объектов Muuri:
width и height каждого элемента.x и y позиции на сетке.visible и
sortData.Обновление карты элементов внутри сетки, чтобы последующие методы
(layout, filter, sort) работали с
актуальной информацией.
Динамическая загрузка контента: Когда элементы
загружаются асинхронно (например, через AJAX), необходимо вызвать
refreshItems после добавления новых DOM-узлов, чтобы сетка
корректно их включила.
Изменение размеров элементов: Если контент
элемента изменился (например, текст или изображение), вызов
refreshItems гарантирует корректное размещение соседних
элементов.
Фильтрация и сортировка: После обновления данных
элементов сетки (например, через изменение пользовательских атрибутов)
refreshItems обновляет внутренние метаданные для методов
filter() и sort().
Оптимизация производительности: В больших сетках
рекомендуется обновлять только изменённые элементы, передавая их в
массив items, чтобы избежать лишнего пересчёта всех
элементов.
layout() после
refreshItems, если требуется визуальное обновление
сетки.refreshItems, чтобы уменьшить количество перерасчётов.keepSort, когда необходимо
сохранить текущий порядок сортировки при обновлении размеров или
содержимого элементов.Метод refreshItems является фундаментальным для
управления динамическими сетками в Muuri. Его
правильное использование обеспечивает стабильную и отзывчивую работу
сетки при любых изменениях DOM или содержимого элементов.