diff --git a/changelog.md b/changelog.md index 4555f53da..ead4d92ef 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,6 @@ # 更新日志 2.0(2020-07) +- BI.OB的on方法返回一个解除监听的函数 - 修复了grid_view执行_unMount时不调用子组件的_unMount的问题 - combo新增belowMouse属性,允许popup在点击处弹出 - combo新增hideWhenAnotherComboOpen属性,开启则其他combo下拉时当前combo收起 diff --git a/src/core/ob.js b/src/core/ob.js index ed8ac8744..9dc8b9959 100644 --- a/src/core/ob.js +++ b/src/core/ob.js @@ -1,5 +1,5 @@ !(function () { - function extend () { + function extend() { var target = arguments[0] || {}, length = arguments.length, i = 1, options, name, src, copy; for (; i < length; i++) { // Only deal with non-null/undefined values @@ -86,8 +86,8 @@ }, _getEvents: function () { - if (!_.isArray(this.events)) { - this.events = []; + if (!_.isObject(this.events)) { + this.events = {}; } return this.events; }, @@ -98,6 +98,7 @@ * @param {Function} fn 事件对应的执行函数 */ on: function (eventName, fn) { + var self = this; eventName = eventName.toLowerCase(); var fns = this._getEvents()[eventName]; if (!_.isArray(fns)) { @@ -105,6 +106,10 @@ this._getEvents()[eventName] = fns; } fns.push(fn); + + return function () { + self.un(eventName, fn); + }; }, /** @@ -148,7 +153,7 @@ */ purgeListeners: function () { /* alex:清空events*/ - this.events = []; + this.events = {}; }, /** * 触发绑定过的事件 diff --git a/typescript/core/inject.ts b/typescript/core/inject.ts new file mode 100644 index 000000000..3852fe442 --- /dev/null +++ b/typescript/core/inject.ts @@ -0,0 +1,47 @@ +type _module = (xtype: string, cls: any) => void; +type _constant = (xtype: string, cls: any) => void; +type _model = (xtype: string, cls: any) => void; +type _store = (xtype: string, cls: any) => void; +type _service = (xtype: string, cls: any) => void; +type _provider = (xtype: string, cls: any) => void; + +interface _modules { + getModule: (type: string) => any; + getAllModules: () => any; +} + +interface _constants { + getConstant: (type: string) => any; +} + +interface _models { + getModel: (type: string, options?: any) => any; +} + +interface _stores { + getStore: (type: string, options?: any) => any; +} + +interface _providers { + getProvider: (type: string, options?: any) => any; +} + +interface _services { + getService: (type: string, options?: any) => any; +} + + +export type _inject = { + module: _module; + constant: _constant; + model: _model; + store: _store; + provider: _provider; + service: _service; + Modules: _modules; + Constants: _constants; + Models: _models; + Stores: _stores; + Providers: _providers; + Services: _services; +} diff --git a/typescript/core/ob.ts b/typescript/core/ob.ts index 16ce71024..88f89968e 100644 --- a/typescript/core/ob.ts +++ b/typescript/core/ob.ts @@ -19,7 +19,7 @@ export interface _OB { _getEvents(): { [eventName: string]: Function[] }; - on(eventName: string, fn: Function): void; + on(eventName: string, fn: Function): Function; once(eventName: string, fn: Function): void; diff --git a/typescript/index.ts b/typescript/index.ts index a9243f40c..ed9f79215 100644 --- a/typescript/index.ts +++ b/typescript/index.ts @@ -36,6 +36,7 @@ import { _i18n } from "./core/i18n"; import { _Plugin } from "./core/plugin"; import { _OB } from "./core/ob"; import { _Widget, _WidgetStatic } from "./core/widget"; +import { _inject } from "./core/inject"; import { _Layout } from "./core/wrapper/layout"; import { _AbsoluteLayout } from "./core/wrapper/layout/layout.absolute"; import { _HTapeLayout, _VTapeLayout } from "./core/wrapper/layout/layout.tape"; @@ -49,9 +50,9 @@ type ClassConstructor = T & { readonly prototype: T; } -export interface BI extends _func, _i18n, _base { +export interface BI extends _func, _i18n, _base, _inject { OB: ClassConstructor<_OB>; - Plugin:_Plugin; + Plugin: _Plugin; Widget: ClassConstructor<_Widget> & _WidgetStatic; Single: ClassConstructor<_Single>; BasicButton: ClassConstructor<_BasicButton> & _BasicButtonStatic;