From 6b481c447309abefbf9ea12f80fa4f874c7ff2a0 Mon Sep 17 00:00:00 2001 From: roymondchen Date: Mon, 12 May 2025 17:48:03 +0800 Subject: [PATCH] =?UTF-8?q?fix(editor):=20=E6=A0=B9=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=9C=A8update=E4=BA=8B=E4=BB=B6=E4=B8=AD?= =?UTF-8?q?=E4=B8=8D=E8=A6=81=E8=A7=A6=E5=8F=91=E4=BE=9D=E8=B5=96=E6=94=B6?= =?UTF-8?q?=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/editor/src/initService.ts | 17 ++++++++++++++--- packages/editor/src/utils/dep/worker.ts | 2 ++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/packages/editor/src/initService.ts b/packages/editor/src/initService.ts index 83d70b46..a7fea7e8 100644 --- a/packages/editor/src/initService.ts +++ b/packages/editor/src/initService.ts @@ -19,6 +19,7 @@ import { createDataSourceTarget, DepTargetType, NODE_CONDS_KEY, + NodeType, Target, } from '@tmagic/core'; import { ChangeRecord } from '@tmagic/form'; @@ -292,7 +293,14 @@ export const initServiceEvents = ( }; const collectIdle = (nodes: MComponent[], deep: boolean, type?: DepTargetType) => - Promise.all(nodes.map((node) => depService.collectIdle([node], { pageId: getPageIdByNode(node) }, deep, type))); + Promise.all( + nodes.map((node) => { + if (node.type === NodeType.ROOT) { + return Promise.resolve(); + } + return depService.collectIdle([node], { pageId: getPageIdByNode(node) }, deep, type); + }), + ); watch( () => editorService.get('stage'), @@ -327,7 +335,7 @@ export const initServiceEvents = ( codeBlockService.setCodeDsl(value.codeBlocks); dataSourceService.set('dataSources', value.dataSources); - depService.removeTargets(DepTargetType.CODE_BLOCK); + depService.clearTargets(); for (const [id, code] of Object.entries(value.codeBlocks)) { depService.addTarget(createCodeBlockTarget(id, code)); @@ -386,7 +394,9 @@ export const initServiceEvents = ( const needRecollectNodes: MComponent[] = []; const normalNodes: MComponent[] = []; for (const { newNode, oldNode, changeRecords } of data) { - if (changeRecords?.length) { + if (newNode.type === NodeType.ROOT) { + normalNodes.push(newNode); + } else if (changeRecords?.length) { // eslint-disable-next-line no-restricted-syntax forChangeRecords: for (const record of changeRecords) { if (!record.propPath) { @@ -435,6 +445,7 @@ export const initServiceEvents = ( handler(); } else { updateStageNodes(normalNodes); + // 在上面判断是否需要收集数据源依赖中已经更新stage Promise.all([ collectIdle(normalNodes, true, DepTargetType.CODE_BLOCK), diff --git a/packages/editor/src/utils/dep/worker.ts b/packages/editor/src/utils/dep/worker.ts index d7b4337c..274acfb2 100644 --- a/packages/editor/src/utils/dep/worker.ts +++ b/packages/editor/src/utils/dep/worker.ts @@ -26,6 +26,8 @@ onmessage = (e) => { postMessage({}); } + watcher.clearTargets(); + if (mApp.codeBlocks) { for (const [id, code] of Object.entries(mApp.codeBlocks)) { watcher.addTarget(createCodeBlockTarget(id, code));