UNPKG

olympus-r

Version:

一个力求简单易用的前端开发框架 #### 开发语言 TypeScript #### 核心架构 MVC #### 模块间通讯和解耦 采用事件机制,利用一个全局唯一的事件派发器进行模块间通讯,解耦模块间依赖 #### 表现层结构 使用桥接模式拆分接口与实现,达到一套核心驱动多套表现层的目的(目前支持DOM、Egret、PixiJS三种表现层),同时支持表现层的未来可扩展性 #### TypeScript装饰器注入 框架提供TypeScript装饰器注入功能,便捷获取托管对象。例如:

158 lines (157 loc) 7.24 kB
import IObservable from "../../core/observable/IObservable"; import IMediator from "../mediator/IMediator"; import IMediatorConstructor from "../mediator/IMediatorConstructor"; import { IResponseDataConstructor } from "../net/ResponseData"; import Bind from "./Bind"; import { EvalExp } from "./Utils"; /** * @author Raykid * @email initial_r@qq.com * @create date 2017-11-06 * @modify date 2017-11-06 * * 绑定管理器,可以将数据和显示对象绑定到一起,MVVM书写界面 */ export default class BindManager { private _bindDict; /** * 获取mediator对应的BindData * * @param {IMediator} mediator * @returns {BindData} * @memberof BindManager */ getBindData(mediator: IMediator): BindData; /** * 绑定数据到UI上 * * @param {IMediator} mediator 中介者 * @returns {Bind} 返回绑定实例 * @memberof BindManager */ bind(mediator: IMediator): Bind; /** * 移除绑定 * * @param {IMediator} mediator * @returns {Bind} * @memberof BindManager */ unbind(mediator: IMediator): Bind; addBindHandler(mediator: IMediator, callback: () => void): void; private getNearestAncestor; /** * 绑定属性值 * * @param {IMediator} mediator 中介者 * @param {*} currentTarget 绑定到的target实体对象 * @param {*} target 绑定命令本来所在的对象 * @param {any[]} envModels 环境变量数组 * @param {string} name 绑定的属性名 * @param {(EvalExp)} exp 绑定的表达式或方法 * @memberof BindManager */ bindValue(mediator: IMediator, currentTarget: any, target: any, envModels: any[], name: string, exp: EvalExp): void; /** * 绑定一个表达式,与bindValue类似,但不会给属性赋值 * * @param {IMediator} mediator 中介者 * @param {*} currentTarget 绑定到的target实体对象 * @param {*} target 绑定命令本来所在的对象 * @param {any[]} envModels 环境变量数组 * @param {(EvalExp)} exp 绑定的表达式或方法 * @memberof BindManager */ bindExp(mediator: IMediator, currentTarget: any, target: any, envModels: any[], exp: EvalExp): void; /** * 绑定方法执行 * * @param {IMediator} mediator 中介者 * @param {*} currentTarget 绑定到的target实体对象 * @param {*} target 绑定命令本来所在的对象 * @param {any[]} envModels 环境变量数组 * @param {string} name 绑定的方法名 * @param {...(EvalExp)[]} argExps 执行方法的参数表达式或方法列表 * @memberof BindManager */ bindFunc(mediator: IMediator, currentTarget: any, target: any, envModels: any[], name: string, ...argExps: (EvalExp)[]): void; /** * 绑定事件 * * @param {IMediator} mediator 中介者 * @param {*} currentTarget 绑定到的target实体对象 * @param {*} target 绑定命令本来所在的对象 * @param {any[]} envModels 环境变量数组 * @param {string} type 绑定的事件类型 * @param {EvalExp} exp 绑定的事件回调表达式或方法 * @memberof BindManager */ bindOn(mediator: IMediator, currentTarget: any, target: any, envModels: any[], type: string, exp: EvalExp): void; /** * 绑定显示 * * @param {IMediator} mediator 中介者 * @param {*} currentTarget 绑定到的target实体对象 * @param {*} target 绑定命令本来所在的对象 * @param {any[]} envModels 环境变量数组 * @param {EvalExp} exp 绑定表达式或方法 * @param {(value:boolean)=>void} [callback] 判断条件改变时会触发这个回调 * @memberof BindManager */ bindIf(mediator: IMediator, currentTarget: any, target: any, envModels: any[], exp: EvalExp, callback?: (value: boolean) => void): void; private _regExp; /** * 绑定循环 * * @param {IMediator} mediator 中介者 * @param {*} currentTarget 绑定到的target实体对象 * @param {*} target 绑定命令本来所在的对象 * @param {any[]} envModels 环境变量数组 * @param {string} name 绑定本来所在的对象在Mediator中的名字 * @param {BindForExpType} exp 循环表达式,形如:"a in b"(表示a遍历b中的key)或"a of b"(表示a遍历b中的值)。b可以是个表达式。或者以三元组形式提供,如["a", "in", "b"],其中b可以是表达式,也可以是求值方法 * @param {IMediatorConstructor} [mediatorCls] 提供该参数将使用提供的中介者包装每一个渲染器 * @param {IConstructor} [declaredCls] 声明的类型 * @param {EvalExp} [dataExp] 提供给中介者包装器的数据表达式 * @param {(data:any, renderer:any, envModels:any[])=>void} [callback] 每次生成新的renderer实例时调用这个回调 * @memberof BindManager */ bindFor(mediator: IMediator, currentTarget: any, target: any, envModels: any[], name: string, exp: BindForExpType, mediatorCls?: IMediatorConstructor, declaredCls?: IConstructor, dataExp?: EvalExp, callback?: (data: any, renderer: any, envModels: any[]) => void): void; /** * 绑定Message * * @param {IMediator} mediator 中介者 * @param {*} currentTarget 绑定到的target实体对象 * @param {*} target 绑定命令本来所在的对象 * @param {any[]} envModels 环境变量数组 * @param {IConstructor|string} type 绑定的消息类型字符串 * @param {string} name 绑定的属性名 * @param {EvalExp} exp 绑定的表达式或方法 * @param {IObservable} [observable] 绑定的消息内核,默认是core * @memberof BindManager */ bindMessage(mediator: IMediator, currentTarget: any, target: any, envModels: any[], type: IConstructor | string, name: string, exp: EvalExp, observable?: IObservable): void; /** * 绑定Response * * @param {IMediator} mediator 中介者 * @param {*} currentTarget 绑定到的target实体对象 * @param {*} target 绑定命令本来所在的对象 * @param {any[]} envModels 环境变量数组 * @param {IResponseDataConstructor|string} type 绑定的通讯消息类型 * @param {string} name 绑定的属性名 * @param {EvalExp} exp 绑定的表达式或方法 * @param {IObservable} [observable] 绑定的消息内核,默认是core * @memberof BindManager */ bindResponse(mediator: IMediator, currentTarget: any, target: any, envModels: any[], type: IResponseDataConstructor | string, name: string, exp: EvalExp, observable?: IObservable): void; } /** BindFor三元组形式 */ export declare type BindForExpTuple = [string, "in" | "of", EvalExp]; /** BindFor表达式可接受的类型 */ export declare type BindForExpType = string | BindForExpTuple; export interface BindData { bind: Bind; callbacks: (() => void)[]; } /** 再额外导出一个单例 */ export declare const bindManager: BindManager;