olympus-r
Version:
一个力求简单易用的前端开发框架 #### 开发语言 TypeScript #### 核心架构 MVC #### 模块间通讯和解耦 采用事件机制,利用一个全局唯一的事件派发器进行模块间通讯,解耦模块间依赖 #### 表现层结构 使用桥接模式拆分接口与实现,达到一套核心驱动多套表现层的目的(目前支持DOM、Egret、PixiJS三种表现层),同时支持表现层的未来可扩展性 #### TypeScript装饰器注入 框架提供TypeScript装饰器注入功能,便捷获取托管对象。例如:
522 lines (521 loc) • 16 kB
TypeScript
import ICommandConstructor from "../../core/command/ICommandConstructor";
import JSFile from '../../core/interfaces/JSFile';
import IMessage from "../../core/message/IMessage";
import IObservable from "../../core/observable/IObservable";
import Dictionary from "../../utils/Dictionary";
import IBridge from "../bridge/IBridge";
import RequestData from "../net/RequestData";
import ResponseData from "../net/ResponseData";
import { ICancelable } from "../system/System";
import IMediator from "./IMediator";
import IMediatorConstructor from "./IMediatorConstructor";
import { ModuleOpenStatus } from "./IMediatorModulePart";
import MediatorStatus from "./MediatorStatus";
/**
* @author Raykid
* @email initial_r@qq.com
* @create date 2017-09-04
* @modify date 2017-09-04
*
* 组件界面中介者基类
*/
/** 规定ModuleManager支持的模块参数类型 */
export declare type ModuleType = IMediatorConstructor | IMediator;
/**
* 注册模块
*
* @export
* @param {string} moduleName 模块名
* @param {IMediatorConstructor} cls 模块类型
*/
export declare function registerModule(moduleName: string, cls: IMediatorConstructor): void;
/**
* 获取模块类型
*
* @export
* @param {string} moduleName 模块名
* @returns {IMediatorConstructor}
*/
export declare function getModule(moduleName: string): IMediatorConstructor;
/**
* 获取模块名
*
* @export
* @param {ModuleType} type 模块实例或模块类型
* @returns {string} 模块名
*/
export declare function getModuleName(type: ModuleType): string;
export declare function isMediator(target: any): boolean;
/**
* 中介者基类
*
* @author Raykid
* @date 2019-03-04
* @export
* @class Mediator
* @implements {IMediator<S, OD, CD>}
* @template S 皮肤类型
* @template OD 开启参数类型
* @template CD 关闭参数类型
*/
export default class Mediator<S = any, OD = any, CD = any> implements IMediator<S, OD, CD> {
private _status;
/**
* 获取中介者状态
*
* @readonly
* @type {MediatorStatus}
* @memberof Mediator
*/
readonly status: MediatorStatus;
/**
* 表现层桥
*
* @type {IBridge}
* @memberof Mediator
*/
bridge: IBridge<S>;
private _viewModel;
/**
* 获取或设置ViewModel
*
* @type {*}
* @memberof Mediator
*/
viewModel: any;
/**
* 绑定目标数组,第一层key是调用层级,第二层是该层级需要编译的对象数组
*
* @type {Dictionary<S, S>[]}
* @memberof Mediator
*/
bindTargets: Dictionary<S, S>[];
/**
* 皮肤
*
* @type {S}
* @memberof Mediator
*/
skin: S;
/**
* 原始皮肤,即传入构造函数的皮肤
*
* @type {S}
* @memberof Mediator
*/
oriSkin: S;
/**
* 获取中介者是否已被销毁
*
* @readonly
* @type {boolean}
* @memberof Mediator
*/
readonly disposed: boolean;
/**
* 打开时传递的data对象
*
* @type {OD}
* @memberof Mediator
*/
data: OD;
private _openMask;
/**
* 开启时是否触发全屏遮罩,防止用户操作,设置操作会影响所有子孙中介者。默认是true
*
* @type {boolean}
* @memberof Mediator
*/
openMask: boolean;
private _responses;
/**
* 模块初始消息的返回数据
*
* @type {ResponseData[]}
* @memberof Mediator
*/
responses: ResponseData[];
private _moduleName;
/**
* 获取模块名
*
* @readonly
* @type {string}
* @memberof Mediator
*/
readonly moduleName: string;
/**
* 模块打开结果回调函数,由moduleManager调用,不要手动调用
*
* @memberof Mediator
*/
moduleOpenHandler: (status: ModuleOpenStatus, err?: Error) => void;
constructor(skin?: S);
/**
* 加载从listAssets中获取到的所有资源
*
* @param {(err?:Error)=>void} handler 加载完毕后的回调,如果出错则会给出err参数
* @returns {void}
* @memberof Mediator
*/
loadAssets(handler: (err?: Error) => void): void;
/**
* 加载从listStyleFiles中获取到的所有资源
*
* @param {(err?:Error)=>void} handler 加载完毕后的回调,如果出错则会给出err参数
* @memberof IMediator
*/
loadStyleFiles(handler: (err?: Error) => void): void;
/**
* 加载从listJsFiles中获取到的所有资源
*
* @param {(err?:Error)=>void} handler 加载完毕后的回调,如果出错则会给出err参数
* @memberof IMediator
*/
loadJsFiles(handler: (err?: Error) => void): void;
/**
* 发送从listInitRequests中获取到的所有资源
*
* @param {(err?:Error)=>void} handler 加载完毕后的回调,如果出错则会给出err参数
* @memberof IMediator
*/
sendInitRequests(handler: (err?: Error) => void): void;
/**
* 当所需资源加载完毕后调用
*
* @param {Error} [err] 加载出错会给出错误对象,没错则不给
* @memberof Mediator
*/
onLoadAssets(err?: Error): void;
/**
* 当所需CSS加载完毕后调用
*
* @param {Error} [err] 加载出错会给出错误对象,没错则不给
* @memberof Mediator
*/
onLoadStyleFiles(err?: Error): void;
/**
* 当所需js加载完毕后调用
*
* @param {Error} [err] 加载出错会给出错误对象,没错则不给
* @memberof Mediator
*/
onLoadJsFiles(err?: Error): void;
/**
* 当所需资源加载完毕后调用
*
* @param {Error} [err] 加载出错会给出错误对象,没错则不给
* @memberof Mediator
*/
onSendInitRequests(err?: Error): void;
/**
* 当获取到所有初始化请求返回时调用,可以通过返回一个true来阻止模块的打开
*
* @param {ResponseData[]} responses 返回结构数组
* @returns {boolean} 返回true则表示停止模块打开
* @memberof Mediator
*/
onGetResponses(responses: ResponseData[]): boolean;
private _openPromiseData;
/**
* 异步获取开启数据
*
* @readonly
* @type {Promise<OD>}
* @memberof Mediator
*/
readonly openData: Promise<OD>;
/**
* 打开,为了实现IOpenClose接口
*
* @param {OD} [data] 开启数据
* @param {...any[]} args 其他数据
* @returns {Promise<any>} 异步返回onOpen时返回的参数
* @memberof Mediator
*/
open(data?: OD, ...args: any[]): Promise<any>;
protected __beforeOnOpen(data?: OD, ...args: any[]): void | Promise<void>;
protected __afterOnOpen(data?: OD, ...args: any[]): void | Promise<void>;
private _closePromiseData;
private _closeData;
/**
* 异步获取关闭参数
*
* @readonly
* @type {Promise<CD>}
* @memberof Mediator
*/
readonly closeData: Promise<CD>;
/**
* 关闭,为了实现IOpenClose接口
*
* @param {CD} [data] 关闭数据
* @param {...any[]} args 其他参数
* @returns {Promise<any>} 异步返回onClose时返回的参数
* @memberof Mediator
*/
close(data?: CD, ...args: any[]): Promise<any>;
protected __beforeOnClose(data?: CD, ...args: any[]): void;
protected __afterOnClose(data?: CD, ...args: any[]): void;
/**
* 当打开时调用
*
* @param {OD} [data] 可能的打开参数
* @param {...any[]} args 其他参数
* @returns {any|Promise<any>} 若返回对象则使用该对象替换传入的data进行后续开启操作
* @memberof Mediator
*/
onOpen(data?: OD, ...args: any[]): any | Promise<any>;
/**
* 当关闭时调用
*
* @param {CD} [data] 可能的关闭参数
* @param {...any[]} args 其他参数
* @returns {any|Promise<any>} 若返回对象则使用该对象当做close操作的返回值
* @memberof Mediator
*/
onClose(data?: CD, ...args: any[]): any | Promise<any>;
private _listeners;
/**
* 监听事件,从这个方法监听的事件会在中介者销毁时被自动移除监听
*
* @param {S} target 事件目标对象
* @param {string} type 事件类型
* @param {Function} handler 事件处理函数
* @param {*} [thisArg] this指向对象
* @memberof Mediator
*/
mapListener(target: S, type: string, handler: Function, thisArg?: any): void;
/**
* 注销监听事件
*
* @param {S} target 事件目标对象
* @param {string} type 事件类型
* @param {Function} handler 事件处理函数
* @param {*} [thisArg] this指向对象
* @memberof Mediator
*/
unmapListener(target: S, type: string, handler: Function, thisArg?: any): void;
/**
* 注销所有注册在当前中介者上的事件监听
*
* @memberof Mediator
*/
unmapAllListeners(): void;
private _disposeDict;
private disposeChild;
/**
* 父中介者
*
* @type {IMediator}
* @memberof Mediator
*/
parent: IMediator;
/**
* 获取根级中介者(当做模块直接被打开的中介者)
*
* @type {IMediator}
* @memberof IMediator
*/
readonly root: IMediator;
protected _children: IMediator[];
/**
* 获取所有子中介者
*
* @type {IMediator[]}
* @memberof Mediator
*/
readonly children: IMediator[];
/**
* 托管子中介者
*
* @param {IMediator} mediator 要托管的中介者
* @memberof Mediator
*/
delegateMediator(mediator: IMediator): void;
/**
* 取消托管子中介者
*
* @param {IMediator} mediator 要取消托管的中介者
* @memberof Mediator
*/
undelegateMediator(mediator: IMediator): void;
/**
* 判断指定中介者是否包含在该中介者里(判断范围包括当前中介者和子孙级中介者)
*
* @param {IMediator} mediator 要判断的中介者
* @returns {boolean}
* @memberof Mediator
*/
containsMediator(mediator: IMediator): boolean;
private _cancelables;
/**
* 托管ICancelable实例
*
* @author Raykid
* @date 2019-05-13
* @param {ICancelable} cancelable
* @memberof Mediator
*/
delegateCancelable(cancelable: ICancelable): void;
/**
* 取消托管ICancelable实例
*
* @author Raykid
* @date 2019-05-13
* @param {ICancelable} cancelable
* @memberof Mediator
*/
undelegateCancelable(cancelable: ICancelable): void;
cancelAll(): void;
/**
* 其他模块被关闭回到当前模块时调用
*
* @param {(IMediator|undefined)} from 从哪个模块回到当前模块
* @param {*} [data] 可能的参数传递
* @memberof Mediator
*/
wakeUp(from: IMediator | undefined, data?: any): void;
/**
* 模块切换到前台时调用(与wakeUp的区别是open时activate会触发,但wakeUp不会)
*
* @param {(IMediator|undefined)} from 从哪个模块来到当前模块
* @param {*} [data] 可能的参数传递
* @memberof Mediator
*/
activate(from: IMediator | undefined, data?: any): void;
/**
* 模块切换到后台时调用(close之后或者其他模块打开时)
*
* @param {(IMediator|undefined)} to 将要去往哪个模块
* @param {*} [data] 可能的参数传递
* @memberof Mediator
*/
deactivate(to: IMediator | undefined, data?: any): void;
/**
* 列出中介者所需的资源数组,可重写
*
* @returns {string[]}
* @memberof Mediator
*/
listAssets(): string[];
/**
* 列出所需CSS资源URL,可重写
*
* @returns {string[]}
* @memberof Mediator
*/
listStyleFiles(): string[];
/**
* 列出所需JS资源URL,可重写
*
* @returns {JSFile[]}
* @memberof Mediator
*/
listJsFiles(): JSFile[];
/**
* 列出模块初始化请求,可重写
*
* @returns {RequestData[]}
* @memberof Mediator
*/
listInitRequests(): RequestData[];
/**
* 其他模块被关闭回到当前模块时调用
*
* @param {(IMediator|undefined)} from 从哪个模块回到当前模块
* @param {*} [data] 可能的参数传递
* @memberof Mediator
*/
onWakeUp(from: IMediator | undefined, data?: any): void;
/**
* 模块切换到前台时调用(与onWakeUp的区别是open时onActivate会触发,但onWakeUp不会)
*
* @param {(IMediator|undefined)} from 从哪个模块来到当前模块
* @param {*} [data] 可能的参数传递
* @memberof Mediator
*/
onActivate(from: IMediator | undefined, data?: any): void;
/**
* 模块切换到后台时调用(close之后或者其他模块打开时)
*
* @param {(IMediator|undefined)} to 将要去往哪个模块
* @param {*} [data] 可能的参数传递
* @memberof Mediator
*/
onDeactivate(to: IMediator | undefined, data?: any): void;
/*********************** 下面是模块消息系统 ***********************/
private _observable;
/**
* 暴露IObservable
*
* @readonly
* @type {IObservable}
* @memberof Mediator
*/
readonly observable: IObservable;
/**
* 派发消息
*
* @param {IMessage} msg 内核消息实例
* @memberof Mediator
*/
dispatch(msg: IMessage): void;
/**
* 派发消息,消息会转变为Message类型对象
*
* @param {string} type 消息类型
* @param {...any[]} params 消息参数列表
* @memberof Mediator
*/
dispatch(type: string, ...params: any[]): void;
/**
* 监听消息
*
* @param {string} type 消息类型
* @param {Function} handler 消息处理函数
* @param {*} [thisArg] 消息this指向
* @param {boolean} [once=false] 是否是一次性监听
* @memberof Mediator
*/
listen(type: IConstructor | string, handler: Function, thisArg?: any, once?: boolean): void;
/**
* 移除消息监听
*
* @param {string} type 消息类型
* @param {Function} handler 消息处理函数
* @param {*} [thisArg] 消息this指向
* @param {boolean} [once=false] 是否是一次性监听
* @memberof Mediator
*/
unlisten(type: IConstructor | string, handler: Function, thisArg?: any, once?: boolean): void;
/**
* 注册命令到特定消息类型上,当这个类型的消息派发到框架内核时会触发Command运行
*
* @param {string} type 要注册的消息类型
* @param {(ICommandConstructor)} cmd 命令处理器,可以是方法形式,也可以使类形式
* @memberof Mediator
*/
mapCommand(type: string, cmd: ICommandConstructor): void;
/**
* 注销命令
*
* @param {string} type 要注销的消息类型
* @param {(ICommandConstructor)} cmd 命令处理器
* @returns {void}
* @memberof Mediator
*/
unmapCommand(type: string, cmd: ICommandConstructor): void;
/**
* 销毁中介者
*
* @memberof Mediator
*/
dispose(): void;
/**
* 当销毁时调用
*
* @memberof Mediator
*/
onDispose(): void;
}