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