From c458b1b2ec657d98d60638678fe718ea0e908820 Mon Sep 17 00:00:00 2001 From: liujuping Date: Fri, 11 Aug 2023 17:20:32 +0800 Subject: [PATCH] fix(material): when the assets exist, use onChangeAssets api, the callback is called immediately --- packages/editor-core/src/editor.ts | 10 ++++++++++ packages/shell/src/api/material.ts | 2 +- packages/types/src/shell/model/editor.ts | 14 ++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/editor-core/src/editor.ts b/packages/editor-core/src/editor.ts index e1d25bdff..de2191f18 100644 --- a/packages/editor-core/src/editor.ts +++ b/packages/editor-core/src/editor.ts @@ -222,6 +222,16 @@ export class Editor extends EventEmitter implements IEditor { }; } + onChange( + keyOrType: KeyOrType, + fn: (data: IPublicTypeEditorGetResult) => void, + ): () => void { + this.setWait(keyOrType, fn); + return () => { + this.delWait(keyOrType, fn); + }; + } + register(data: any, key?: IPublicTypeEditorValueKey): void { this.context.set(key || data, data); this.notifyGot(key || data); diff --git a/packages/shell/src/api/material.ts b/packages/shell/src/api/material.ts index ea9d6e01b..39b21848e 100644 --- a/packages/shell/src/api/material.ts +++ b/packages/shell/src/api/material.ts @@ -181,7 +181,7 @@ export class Material implements IPublicApiMaterial { onChangeAssets(fn: () => void): IPublicTypeDisposable { const dispose = [ // 设置 assets,经过 setAssets 赋值 - this[editorSymbol].onGot('assets', fn), + this[editorSymbol].onChange('assets', fn), // 增量设置 assets,经过 loadIncrementalAssets 赋值 this[editorSymbol].eventBus.on('designer.incrementalAssetsReady', fn), ]; diff --git a/packages/types/src/shell/model/editor.ts b/packages/types/src/shell/model/editor.ts index 11d75aac7..e6171f031 100644 --- a/packages/types/src/shell/model/editor.ts +++ b/packages/types/src/shell/model/editor.ts @@ -15,13 +15,27 @@ export interface IPublicModelEditor extends StrictEventEmitter void | Promise; + /** + * 获取 keyOrType 一次 + */ onceGot: (keyOrType: KeyOrType) => Promise>; + /** + * 获取 keyOrType 多次 + */ onGot: ( keyOrType: KeyOrType, fn: (data: IPublicTypeEditorGetResult) => void ) => () => void; + /** + * 监听 keyOrType 变化 + */ + onChange: ( + keyOrType: KeyOrType, + fn: (data: IPublicTypeEditorGetResult) => void + ) => () => void; + register: (data: any, key?: IPublicTypeEditorValueKey, options?: IPublicTypeEditorRegisterOptions) => void; get eventBus(): IPublicApiEvent;