const { ccclass } = cc._decorator; type PausePanelAction = (event?: cc.Event, customEventData?: string) => void; interface PausePanelActions { [name: string]: PausePanelAction; } /** Pause prefab 中跨脚本按钮的桥接层;setUi 内部按钮仍保持原绑定。 */ @ccclass export default class PausePanel extends cc.Component { private actions: PausePanelActions = null; bind(actions: PausePanelActions) { this.actions = actions || {}; } closePause(event?: cc.Event, customEventData?: string) { this.invoke("closePause", event, customEventData); } shareFriend(event?: cc.Event, customEventData?: string) { this.invoke("shareFriend", event, customEventData); } openMessage(event?: cc.Event, customEventData?: string) { this.invoke("openMessage", event, customEventData); } returnHome(event?: cc.Event, customEventData?: string) { this.invoke("returnHome", event, customEventData); } private invoke(name: string, event?: cc.Event, customEventData?: string) { const action = this.actions && this.actions[name]; if (action) { action(event, customEventData); return; } cc.warn("PausePanel action is not bound:", name); } onDestroy() { this.actions = null; } }