Оскільки, очевидно, ви дійсно не можете знищити екземпляри карт, спосіб зменшити цю проблему, якщо
- на веб-сайті потрібно показати відразу кілька карт
- кількість карт може змінюватися при взаємодії з користувачем
- карти потрібно приховувати та повторно показувати разом з іншими компонентами (тобто вони не відображаються у фіксованому положенні в DOM)
веде пул екземплярів карт. Пул відстежує використовувані екземпляри, і коли йому пропонується новий екземпляр, він перевіряє, чи вільний будь-який з доступних екземплярів карти: якщо він є, він поверне існуючий, якщо ні, то створить новий екземпляр карти та поверніть його, додавши до пулу. Таким чином у вас буде лише максимальна кількість екземплярів, що дорівнює максимальній кількості карт, які ви коли-небудь показували одночасно на екрані. Я використовую цей код (для цього потрібен jQuery):
var mapInstancesPool = {
pool: [],
used: 0,
getInstance: function(options){
if(mapInstancesPool.used >= mapInstancesPool.pool.length){
mapInstancesPool.used++;
mapInstancesPool.pool.push (mapInstancesPool.createNewInstance(options));
} else {
mapInstancesPool.used++;
}
return mapInstancesPool.pool[mapInstancesPool.used-1];
},
reset: function(){
mapInstancesPool.used = 0;
},
createNewInstance: function(options){
var div = $("<div></div>").addClass("myDivClassHereForStyling");
var map = new google.maps.Map(div[0], options);
return {
map: map,
div: div
}
}
}
Ви передаєте йому початкові параметри карти (згідно з другим аргументом конструктора google.maps.Map), і він повертає як екземпляр карти (на якому ви можете викликати функції, що відносяться до google.maps.Map), так і контейнер, який Ви можете створити стиль за допомогою класу "myDivClassHereForStyling", і можете динамічно додати до DOM. Якщо вам потрібно скинути систему, ви можете скористатися mapInsistancePool.reset (). Він скине лічильник на 0, зберігаючи всі наявні екземпляри в пулі для повторного використання. У моїй програмі мені потрібно було видалити всі карти одночасно і створити новий набір карт, тому немає функції переробки конкретного екземпляра карти: ваш пробіг може змінюватися. Щоб видалити карти з екрану, я використовую jQuery's detach, який не руйнує контейнер карти.
Використовуючи цю систему, і використовуючи
google.maps.event.clearInstanceListeners(window);
google.maps.event.clearInstanceListeners(document);
і працює
google.maps.event.clearInstanceListeners(divReference[0]);
divReference.detach()
.