BaseMediator.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import BaseCommand from "./BaseCommand";
  2. import { BaseView } from "./BaseView";
  3. import BaseModel from "./BaseModel";
  4. import {Facade} from "../Facade";
  5. import NotificationManager from "../manager/NotificationManager";
  6. import CommandManager from "../manager/CommandManager";
  7. import BaseScene from "./BaseScene";
  8. /**
  9. * 视图中介者基类
  10. * @author Yue
  11. * @description 生命周期
  12. * BaseMediator.init
  13. * BaseView.__init__
  14. * BaseMediator.viewDidAppear
  15. */
  16. export default abstract class BaseMediator {
  17. /** 当前中介者持有的view视图 */
  18. public view: BaseView;
  19. /** 当前中介者中注册的消息列表 */
  20. private _notiMap: Map<string, {key: string, cb: (data: any)=>void, target: any}>;
  21. /**
  22. * 初始化接口,此时视图还没有创建,如果想操作视图view请在viewDidAppear函数中进行。
  23. * @param {Object} data 自定义的任意类型透传数据。(可选)
  24. * @override
  25. * */
  26. public abstract init(data?: any): void;
  27. /**
  28. * 内部初始化使用,外部不要调用。
  29. * @private
  30. */
  31. private __init__(): void {
  32. this._notiMap = new Map<string, {key: string, cb: (data: any)=>void, target: any}>();
  33. }
  34. /**
  35. * 视图显示后会调用的接口
  36. * @override
  37. */
  38. public abstract viewDidAppear(): void;
  39. /**
  40. * 绑定UI事件,接收view层派发的事件。
  41. * @param {string} name 事件名称
  42. * @param {(any)=>void} cb 事件回调
  43. * @param {BaseMediator} target 回调绑定对象
  44. */
  45. public bindEvent(name: string, cb: (body: any)=>void, target: BaseMediator): void {
  46. this.view.__bindEvent__(name, cb, target);
  47. }
  48. /**
  49. * 注册消息监听
  50. * @param {string} noti 通知key值
  51. * @param {(data: any)=>void} cb 通知监听的回调函数
  52. * @param {Object} target 回调绑定的对象
  53. */
  54. public registerNoti(noti: string, cb: (data: any)=>void, target: any): void {
  55. this._notiMap.set(noti, {key: noti, cb: cb, target: target});
  56. }
  57. public deleteKey(noti: string){
  58. this._notiMap.delete(noti);
  59. }
  60. /**
  61. * 发送消息通知
  62. * @param {string} noti 通知key值
  63. * @param {Object} body 消息传递的参数
  64. */
  65. public sendNoti(noti: string, body: any): void {
  66. NotificationManager.getInstance().__sendNotification__(noti, body);
  67. }
  68. /**
  69. * 发送命令接口
  70. * @param {{new (): BaseCommand}} cmd 命令类
  71. * @param {Object} data 命令参数
  72. */
  73. public sendCmd<T extends BaseCommand>(cmd: {new (): T}, data?: any): void {
  74. CommandManager.getInstance().__executeCommand__(cmd, data);
  75. }
  76. /**
  77. * 打开新场景
  78. * @param mediator
  79. * @param view
  80. * @param data {Object} data 自定义的任意类型透传数据。(可选)
  81. */
  82. public runScene(mediator: {new(): BaseMediator}, view: {new(): BaseScene}, data?: any): void {
  83. Facade.getInstance().runScene(mediator, view, data);
  84. }
  85. /**
  86. * 返回上一场景
  87. * @returns {boolean}是否存在上一个场景
  88. */
  89. public backScene(): boolean {
  90. return Facade.getInstance().backScene();
  91. }
  92. /**
  93. * 打开view界面
  94. * @param {{new(): BaseMediator}} mediator 界面mediator类型,类类型。
  95. * @param {{new(): BaseView}} view view 场景mediator类型,类类型。
  96. * @param {Object} data 自定义的任意类型透传数据。(可选)
  97. */
  98. public popView(mediator: {new(): BaseMediator}, view: {new(): BaseView}, data?: any): void {
  99. Facade.getInstance().popView(mediator, view, data);
  100. }
  101. /**
  102. * 添加层级
  103. * @param {{new(): BaseMediator}} mediator 界面mediator类型,类类型。
  104. * @param {{new(): BaseView}} view view 场景mediator类型,类类型。
  105. * @param {number} zOrder 层级。(可选)
  106. * @param {Object} data 自定义的任意类型透传数据。(可选)
  107. */
  108. public addLayer(mediator: {new(): BaseMediator}, view: {new(): BaseView}, zOrder?: number, data?: any): void {
  109. Facade.getInstance().addLayer(mediator, view, zOrder, data);
  110. }
  111. /**
  112. * 获取model对象
  113. * @param {{new (): BaseModel}} model
  114. */
  115. public getModel<T extends BaseModel>(model: {new (): T}): T {
  116. return Facade.getInstance().getModel(model);
  117. }
  118. /**
  119. * 销毁接口
  120. * @override
  121. */
  122. public abstract destroy(): void;
  123. }