From d7977b54b2a482df6dc0b4edd0224fb6a816f480 Mon Sep 17 00:00:00 2001 From: chyizheng Date: Mon, 29 Jan 2024 20:26:05 +0800 Subject: [PATCH] fix: avoid missing backend element on detached --- glass-easel/src/element.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/glass-easel/src/element.ts b/glass-easel/src/element.ts index 021c8ea2..9d38b6c6 100644 --- a/glass-easel/src/element.ts +++ b/glass-easel/src/element.ts @@ -496,9 +496,12 @@ export class Element implements NodeCast { } private static checkAndCallDetached(node: Node) { + const destroyQueue: Node[] = [] + const callFunc = function callFunc(node: Node) { if (node._$destroyOnDetach) { - node.destroyBackendElement() + // Destroy later to avoid missing backend elements + destroyQueue.push(node) } if (isElement(node) && node._$attached) { if (isComponent(node)) { @@ -530,6 +533,10 @@ export class Element implements NodeCast { } } callFunc(node) + + for (let i = 0; i < destroyQueue.length; i += 1) { + destroyQueue[i]!.destroyBackendElement() + } } private static checkAndCallMoved(node: Node) {