From d1292fcdb121d1435e4020d5d306c76bf763503b Mon Sep 17 00:00:00 2001 From: Simon Seyock Date: Wed, 24 Jan 2024 18:09:24 +0100 Subject: [PATCH 1/2] fix: remove listeners if overlay is destroyed --- src/olcs/OverlaySynchronizer.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/olcs/OverlaySynchronizer.ts b/src/olcs/OverlaySynchronizer.ts index d85ceaf88..3fc4d3ec8 100644 --- a/src/olcs/OverlaySynchronizer.ts +++ b/src/olcs/OverlaySynchronizer.ts @@ -3,6 +3,8 @@ import SynchronizedOverlay from './SynchronizedOverlay'; import {getUid} from './util'; import type {Scene} from 'cesium'; import type {CollectionEvent} from 'ol/Collection.js'; +import {unByKey as olObservableUnByKey} from 'ol/Observable.js'; +import type {EventsKey} from 'ol/events'; export default class OverlaySynchronizer { private overlayCollection_: Collection; @@ -10,6 +12,7 @@ export default class OverlaySynchronizer { private overlayContainer_: HTMLDivElement; private overlayMap_: Map = new Map(); private overlayEvents = ['click', 'dblclick', 'mousedown', 'touchstart', 'pointerdown', 'mousewheel', 'wheel']; + private listenerKeys_: EventsKey[]; /** * @param map @@ -59,8 +62,12 @@ export default class OverlaySynchronizer { synchronize() { this.destroyAll(); this.overlayCollection_.forEach((overlay) => { this.addOverlay(overlay); }); - this.overlayCollection_.on('add', (evt: CollectionEvent) => this.addOverlay(evt.element)); - this.overlayCollection_.on('remove', (evt: CollectionEvent) => this.removeOverlay(evt.element)); + this.listenerKeys_.push( + this.overlayCollection_.on('add', (evt: CollectionEvent) => this.addOverlay(evt.element)) + ); + this.listenerKeys_.push( + this.overlayCollection_.on('remove', (evt: CollectionEvent) => this.removeOverlay(evt.element)) + ); } @@ -102,5 +109,7 @@ export default class OverlaySynchronizer { overlay.destroy(); }); this.overlayMap_.clear(); + olObservableUnByKey(this.listenerKeys_); + this.listenerKeys_.splice(0); } } From 73d457163308f9ffc08d236b1b6cb8cd1527577d Mon Sep 17 00:00:00 2001 From: gberaudo Date: Fri, 26 Jan 2024 18:56:44 +0100 Subject: [PATCH 2/2] Use .length = 0 This is more consistent with the rest of the code base. --- src/olcs/OverlaySynchronizer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/olcs/OverlaySynchronizer.ts b/src/olcs/OverlaySynchronizer.ts index 3fc4d3ec8..95955b663 100644 --- a/src/olcs/OverlaySynchronizer.ts +++ b/src/olcs/OverlaySynchronizer.ts @@ -110,6 +110,6 @@ export default class OverlaySynchronizer { }); this.overlayMap_.clear(); olObservableUnByKey(this.listenerKeys_); - this.listenerKeys_.splice(0); + this.listenerKeys_.length = 0; } }