From e6e68ae69a1cb330709f4d9863b900b55d6117ed Mon Sep 17 00:00:00 2001 From: roymondchen Date: Mon, 12 Jan 2026 20:17:47 +0800 Subject: [PATCH] =?UTF-8?q?refactor(core):=20=E8=B0=83=E6=95=B4eventHelper?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/core/src/App.ts | 20 +++++++------------- packages/core/src/EventHelper.ts | 22 +++++++++++++++++++--- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/packages/core/src/App.ts b/packages/core/src/App.ts index c1bf7038..648c2aa0 100644 --- a/packages/core/src/App.ts +++ b/packages/core/src/App.ts @@ -197,17 +197,7 @@ class App extends EventEmitter { app: this, }); - if (this.eventHelper) { - this.eventHelper.removeNodeEvents(); - for (const [, node] of this.page.nodes) { - this.eventHelper.bindNodeEvents(node); - } - for (const [, page] of this.pageFragments) { - for (const [, node] of page.nodes) { - this.eventHelper.bindNodeEvents(node); - } - } - } + this.eventHelper?.initEvents(); super.emit('page-change', this.page); } @@ -254,7 +244,7 @@ class App extends EventEmitter { node.data?.id && node.eventKeys.has(`${String(name)}_${node.data.id}`) ) { - return this.eventHelper?.emit(node.eventKeys.get(`${String(name)}_${node.data.id}`)!, node, ...otherArgs); + return this.eventHelper.emit(node.eventKeys.get(`${String(name)}_${node.data.id}`)!, node, ...otherArgs); } return super.emit(name, ...args); } @@ -265,8 +255,12 @@ class App extends EventEmitter { * @returns void */ public async runCode(codeId: Id, params: Record, args: any[], flowState?: FlowState, node?: Node) { - if (!codeId || isEmpty(this.codeDsl)) return; + if (!codeId || isEmpty(this.codeDsl)) { + return; + } + const content = this.codeDsl?.[codeId]?.content; + if (typeof content === 'function') { try { await content({ app: this, params, eventParams: args, flowState, node }); diff --git a/packages/core/src/EventHelper.ts b/packages/core/src/EventHelper.ts index ec420e86..0e4c926a 100644 --- a/packages/core/src/EventHelper.ts +++ b/packages/core/src/EventHelper.ts @@ -82,6 +82,22 @@ export default class EventHelper extends EventEmitter { this.dataSourceEventList.clear(); } + public initEvents() { + this.removeNodeEvents(); + + if (this.app.page) { + for (const [, node] of this.app.page.nodes) { + this.bindNodeEvents(node); + } + } + + for (const [, page] of this.app.pageFragments) { + for (const [, node] of page.nodes) { + this.bindNodeEvents(node); + } + } + } + public bindNodeEvents(node: TMagicNode) { node.events?.forEach((event, index) => { if (!event.name) { @@ -301,11 +317,11 @@ export default class EventHelper extends EventEmitter { return; } - const instanceMethodPropmise = []; + const instanceMethodPromise = []; for (const node of toNodes) { if (node.instance) { if (typeof node.instance[methodName] === 'function') { - instanceMethodPropmise.push(node.instance[methodName](fromCpt, ...args)); + instanceMethodPromise.push(node.instance[methodName](fromCpt, ...args)); } } else { node.addEventToQueue({ @@ -316,6 +332,6 @@ export default class EventHelper extends EventEmitter { } } - await Promise.all(instanceMethodPropmise); + await Promise.all(instanceMethodPromise); } }