From cfd5998242031f393bc1003c40b55cde35f3c515 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Thu, 9 Apr 2026 12:03:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(stage):=20=E6=96=B0=E5=A2=9E=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E5=90=8E=E7=AD=89=E5=BE=85=E6=B8=B2=E6=9F=93=E5=AE=8C?= =?UTF-8?q?=E5=90=8E=E9=80=89=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/stage/src/StageCore.ts | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/packages/stage/src/StageCore.ts b/packages/stage/src/StageCore.ts index 3dfb7c11..68b2d00b 100644 --- a/packages/stage/src/StageCore.ts +++ b/packages/stage/src/StageCore.ts @@ -88,7 +88,38 @@ export default class StageCore extends EventEmitter { * @param id 选中的id */ public async select(id: Id, event?: MouseEvent): Promise { - const el = this.renderer?.getTargetElement(id) || null; + if (!this.renderer) { + return; + } + + let el = this.renderer.getTargetElement(id) || null; + + if (!el) { + el = await new Promise((resolve) => { + const observer = new MutationObserver(() => { + const target = this.renderer?.getTargetElement(id); + if (target) { + observer.disconnect(); + clearTimeout(timer); + resolve(target); + } + }); + + const body = this.renderer?.getDocument()?.body; + if (!body) { + resolve(null); + return; + } + + observer.observe(body, { childList: true, subtree: true }); + + const timer = setTimeout(() => { + observer.disconnect(); + resolve(this.renderer?.getTargetElement(id) || null); + }, 1000); + }); + } + if (el === this.actionManager?.getSelectedEl()) return; await this.renderer?.select([id]);