Skip to content

Commit 0221ea2

Browse files
authored
Merge pull request #282 from wechat-miniprogram:fix-shadow-listener-removal
fix(shadowSync): fix listener removal
2 parents ac4e789 + ba7f7bc commit 0221ea2

1 file changed

Lines changed: 14 additions & 12 deletions

File tree

glass-easel-shadow-sync/src/view_controller.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,10 @@ export class ViewController {
5858
private _listenerMap = new WeakMap<
5959
Element,
6060
{
61-
normal: Map<string, EventListener<unknown>>
62-
capture: Map<string, EventListener<unknown>>
63-
}
61+
name: string
62+
listener: EventListener<unknown>
63+
isCapture: boolean
64+
}[]
6465
>()
6566

6667
private _styleSheetIdMapping = Object.create(null) as Record<number, number>
@@ -649,21 +650,22 @@ export class ViewController {
649650
): void {
650651
const { _glassEasel, _listenerMap } = this
651652
const elemListenerMap = _listenerMap
652-
if (!elemListenerMap.has(element)) {
653-
elemListenerMap.set(element, {
654-
normal: new Map(),
655-
capture: new Map(),
656-
})
653+
if (!elemListenerMap.has(element)) elemListenerMap.set(element, [])
654+
const listeners = elemListenerMap.get(element)!
655+
const oldIndex = listeners.findIndex(
656+
({ name, isCapture }) => name === type && isCapture === capture,
657+
)
658+
if (oldIndex !== -1) {
659+
const { listener: oldListener, isCapture: oldIsCapture } = listeners[oldIndex]!
660+
listeners.splice(oldIndex, 1)
661+
element.removeListener(type, oldListener, { capture: oldIsCapture })
657662
}
658-
const listenerMap = elemListenerMap.get(element)!
659-
const listeners = capture ? listenerMap.capture : listenerMap.normal
660-
if (listeners.has(type)) element.removeListener(type, listeners.get(type)!)
661663
element.addListener(type, listener, {
662664
mutated: mutLevel === _glassEasel.EventMutLevel.Mut,
663665
final: mutLevel === _glassEasel.EventMutLevel.Final,
664666
capture,
665667
})
666-
listeners.set(type, listener)
668+
listeners.push({ name: type, listener, isCapture: capture })
667669
}
668670

669671
initValues(element: Element, values: Record<string, unknown>): void {

0 commit comments

Comments
 (0)