支持信息动态注册(用来兼容代码在bundle中的情况)

This commit is contained in:
gongxh 2025-07-22 17:08:02 +08:00
parent 5d48c7d913
commit 366e5fbfb0
4 changed files with 47 additions and 0 deletions

View File

@ -8,6 +8,7 @@ import { _decorator } from "cc";
import { GRoot } from "fairygui-cc";
import { ModuleBase } from "../module/ModuleBase";
import { debug } from "../tool/log";
import { _uidecorator } from "../ui/UIDecorator";
import { WindowManager } from "../ui/WindowManager";
import { WindowResPool } from "../ui/WindowResPool";
import { CocosWindowContainer } from "./CocosWindowContainer";
@ -35,6 +36,7 @@ export class CocosUIModule extends ModuleBase {
this.node.destroyAllChildren();
/** 注册窗口信息 */
WindowManager.registerUI();
_uidecorator.setRegisterFinish();
this.onInit();
}

View File

@ -25,6 +25,23 @@ export class ComponentExtendHelper {
}
}
/**
*
* @param ctor
* @param pkg
* @param name
*/
public static dynamicRegister(ctor: any, pkg: string, name: string): void {
const componentKey = `${pkg}/${name}`;
if (this._registeredComponents.has(componentKey)) {
debug(`自定义组件已注册,跳过 组件名:${name} 包名:${pkg}`);
return;
}
debug(`自定义组件注册 组件名:${name} 包名:${pkg}`);
this.registerComponent(ctor, pkg, name);
this._registeredComponents.add(componentKey);
}
/**
*
* @param info

View File

@ -5,6 +5,8 @@
*/
import { ObjectHelper } from "../tool/helper/ObjectHelper";
import { ComponentExtendHelper } from "./ComponentExtendHelper";
import { WindowManager } from "./WindowManager";
export namespace _uidecorator {
/** @internal */
const UIPropMeta = "__uipropmeta__"
@ -76,6 +78,8 @@ export namespace _uidecorator {
bundle: bundle || "",
},
});
// 首次引擎注册完成后 动态注册窗口
_registerFinish && WindowManager.dynamicRegisterWindow(ctor, groupName, pkgName, name, bundle || "");
};
}
@ -119,6 +123,8 @@ export namespace _uidecorator {
name: name,
}
});
// 首次引擎注册完成后 动态注册自定义组件
_registerFinish && ComponentExtendHelper.dynamicRegister(ctor, pkg, name);
};
}
@ -162,6 +168,8 @@ export namespace _uidecorator {
bundle: bundle || "",
}
});
// 首次引擎注册完成后 动态注册窗口header
_registerFinish && WindowManager.dynamicRegisterHeader(ctor, pkg, name, bundle || "");
};
}
@ -210,6 +218,13 @@ export namespace _uidecorator {
// debug("方法装饰器:", target.constructor, name, descriptor);
ObjectHelper.getObjectProp(target.constructor, UICBMeta)[name] = descriptor.value;
}
let _registerFinish: boolean = false;
/** 首次UI注册完成 */
export function setRegisterFinish(): void {
_registerFinish = true;
}
}
let _global = globalThis || window || global;

View File

@ -208,6 +208,7 @@ export class WindowManager {
* UI窗口类到资源池中 使
* _uidecorator.getWindowMaps()
*
* @internal
*/
public static registerUI(): void {
// 窗口注册
@ -225,6 +226,18 @@ export class WindowManager {
ComponentExtendHelper.register();
}
/** 动态注册窗口到资源池中 */
public static dynamicRegisterWindow(ctor: any, group: string, pkg: string, name: string, bundle: string): void {
debug(`窗口注册 窗口名:${name} 包名:${pkg} 组名:${group}`);
this._resPool.add(ctor, group, pkg, name, bundle);
}
/** 动态注册窗口header到资源池中 */
public static dynamicRegisterHeader(ctor: any, pkg: string, name: string, bundle: string): void {
debug(`header注册 header名:${name} 包名:${pkg}`);
this._resPool.addHeader(ctor, pkg, name, bundle);
}
/**
* . ()
* @param group