Метод destroy полностью удаляет экземпляр
Isotope, освобождая связанные с ним ресурсы и возвращая
DOM‑элемент контейнера в состояние, максимально близкое к исходному.
После вызова метода:
Метод используется в ситуациях, когда работа библиотеки более не требуется, либо перед повторной инициализацией компонента.
iso.destroy()
где iso — ранее созданный экземпляр Isotope.
Пример инициализации:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'masonry'
});
Уничтожение экземпляра:
iso.destroy();
После выполнения метода контейнер .grid перестает
управляться библиотекой.
Во время работы Isotope библиотека активно изменяет структуру и стили
элементов. При вызове destroy происходят следующие
операции.
Isotope устанавливает inline‑стили для позиционирования элементов:
position: absolute;
left: ...
top: ...
transform: ...
После уничтожения экземпляра эти стили удаляются. Элементы возвращаются к стандартному поведению потока документа.
Контейнер сетки может получать служебные стили, например:
position: relative;
height: ...
Метод destroy удаляет подобные изменения, позволяя
контейнеру снова управляться CSS или другой логикой.
Некоторые режимы компоновки добавляют классы к контейнеру или элементам. При уничтожении экземпляра эти классы могут быть удалены, если они были добавлены библиотекой.
Метод destroy выполняет несколько внутренних
операций.
Isotope использует события:
layoutCompletearrangeCompleteremoveCompleteПри уничтожении:
Экземпляр хранит информацию о:
items)Метод destroy очищает эти структуры, предотвращая утечки
памяти.
Isotope сохраняет ссылку на экземпляр через data внутри
элемента. После уничтожения эта связь удаляется.
Это позволяет безопасно создавать новый экземпляр на том же контейнере.
destroyЧасто метод используется для полной переинициализации сетки.
var iso = new Isotope('.grid', {
layoutMode: 'fitRows'
});
Позже требуется изменить режим компоновки.
iso.destroy();
iso = new Isotope('.grid', {
layoutMode: 'masonry'
});
Подход обеспечивает:
В одностраничных приложениях (SPA) компоненты часто создаются и удаляются динамически.
Если компонент, содержащий Isotope, удаляется из DOM, необходимо предварительно уничтожить экземпляр.
Пример:
function removeGallery() {
iso.destroy();
document.querySelector('.grid').remove();
}
Это предотвращает:
Иногда проще уничтожить экземпляр и создать новый, чем изменять множество параметров.
Типичная ситуация:
itemSelector;Пример:
iso.destroy();
document.querySelector('.grid').innerHTML = newContent;
iso = new Isotope('.grid', {
itemSelector: '.card',
layoutMode: 'masonry'
});
destroy и removeМетоды решают разные задачи.
removeУдаляет элементы из сетки, но экземпляр продолжает работать.
iso.remove(elements);
iso.layout();
destroyУдаляет всю систему управления сеткой.
iso.destroy();
После вызова любые методы Isotope больше не работают.
После выполнения:
iso.destroy();
вызовы методов становятся недоступными.
Пример некорректного использования:
iso.destroy();
iso.arrange({ filter: '.active' });
Это приведёт к ошибке, поскольку экземпляр уже не управляет DOM.
При сложной логике интерфейса иногда требуется проверять наличие экземпляра перед уничтожением.
Пример:
if (iso) {
iso.destroy();
iso = null;
}
Это предотвращает повторный вызов метода.
getInstanceЕсли экземпляр создавался сторонним кодом, можно получить его через API.
var grid = document.querySelector('.grid');
var iso = Isotope.data(grid);
if (iso) {
iso.destroy();
}
Метод Isotope.data() возвращает экземпляр, связанный с
DOM‑элементом.
В интерфейсах с вкладками или модальными окнами сетка может временно исчезать.
Пример:
tabs.on('change', function() {
iso.destroy();
});
При повторном открытии вкладки выполняется новая инициализация.
Если на странице используется несколько сеток, каждая из них должна уничтожаться отдельно.
var grids = document.querySelectorAll('.grid');
grids.forEach(function(grid) {
var iso = Isotope.data(grid);
if (iso) {
iso.destroy();
}
});
В современных фреймворках (React, Vue, Angular) уничтожение экземпляра должно происходить при удалении компонента.
componentWillUnmount() {
this.iso.destroy();
}
Это предотвращает:
destroy обязательноСитуации, в которых метод необходим:
iso.destroy();
iso.destroy();
После первого вызова экземпляр фактически перестает существовать.
Лучшей практикой считается очистка ссылки:
iso.destroy();
iso = null;
Это помогает сборщику мусора корректно освободить память.
После уничтожения layout‑позиции удаляются. Код, который рассчитывает координаты элементов, может работать некорректно.
Инициализация:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'masonry'
});
Фильтрация:
iso.arrange({
filter: '.featured'
});
Уничтожение:
iso.destroy();
iso = null;
Повторное создание:
iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitRows'
});
В крупных приложениях неправильное управление экземплярами может привести к:
Использование destroy гарантирует:
var iso = new Isotope(...)
layout
filter
sort
add/remove items
iso.destroy();
После этого контейнер возвращается к обычному DOM‑поведению без участия Isotope.