js版事件管理器 V0.7

          在上一版的基礎上進行了如下改進:
          1、增加了事件參數傳遞的支持;
          2、增加了事件、攔截器的有效范圍定義的支持;
          3、增加了事件、攔截器的清除的支持。

          源碼如下:

          ??1 /*
          ??2 ?*?============================================================
          ??3 ?*?------------------------------------------------------------
          ??4 ?*?Author:?Bluedavy?(Bluedavy.blogjava.net)
          ??5 ?*?------------------------------------------------------------
          ??6 ?*?事件管理器
          ??7 ?*?1、事件的注冊/反注冊
          ??8 ?*?2、事件的調用
          ??9 ?*?3、事件的攔截器(事件執行前和事件執行后)
          ?10 ?*?4、攔截器的有效范圍
          ?11 ?*?5、事件執行的有效范圍
          ?12 ?*?TODO:COR?Pattern
          ?13 ?*?============================================================
          ?14 ? */

          ?15 ? var ?EventManager = Class.create();
          ?16 ?
          ?17 ? // ?事件集合
          ?18 ?EventManager.events = {} ;
          ?19 ?
          ?20 ? // ?事件攔截器集合
          ?21 ?EventManager.interceptors = {} ;
          ?22 ?
          ?23 ? // ?常量定義
          ?24 ?EventManager.Constant = {
          ?25 ?????SCOPE: " __ALL__ "
          ?26 ?}

          ?27 ?
          ?28 ? // ?注冊事件
          ?29 ?EventManager.registerEvent = function (eventalias,event,scope) {
          ?30 ????? if ( typeof (scope) == 'undefined') {
          ?31 ?????????scope = EventManager.Constant.SCOPE;
          ?32 ?????}

          ?33 ????? if (EventManager.events[scope] == null ) {
          ?34 ?????????EventManager.events[scope] = {} ;
          ?35 ?????}

          ?36 ?????EventManager.events[scope][eventalias] = event;
          ?37 ?}

          ?38 ?
          ?39 ? // ?反注冊事件
          ?40 ?EventManager.unregisterEvent = function (eventalias,scope) {
          ?41 ????? if ( typeof (scope) == 'undefined') {
          ?42 ?????????scope = EventManager.Constant.SCOPE;
          ?43 ?????}

          ?44 ?????EventManager.events[scope][eventalias] = null ;
          ?45 ?}

          ?46 ?
          ?47 ? // ?攔截器常量定義
          ?48 ?EventManager.Interceptor = {
          ?49 ?????BEFORE: " before " ,
          ?50 ?????AFTER: " after "
          ?51 ?}

          ?52 ?
          ?53 ? // ?清除某范圍內的事件以及攔截器
          ?54 ?EventManager.clear = function (scope) {
          ?55 ????? if ( typeof (scope) == 'undefined') {
          ?56 ?????????EventManager.events = {} ;????
          ?57 ?????????EventManager.interceptors = {} ;
          ?58 ?????}

          ?59 ????? else {
          ?60 ?????????EventManager.events[scope] = null ;
          ?61 ?????????EventManager.interceptors[scope] = null ;????
          ?62 ?????}

          ?63 ?}

          ?64 ?
          ?65 ? // ?事件直接調用
          ?66 ?EventManager.directyinvoke = function (eventalias,params,scope) {
          ?67 ????? if ( typeof (scope) == 'undefined') {
          ?68 ?????????scope = EventManager.Constant.SCOPE;
          ?69 ?????}

          ?70 ????? if (EventManager.events[scope] == null ) {
          ?71 ????????? return ;
          ?72 ?????}

          ?73 ????? var ?bindevent = EventManager.events[scope][eventalias];
          ?74 ????? if (bindevent != null ) {
          ?75 ????????? try {
          ?76 ?????????????EventManager.invokeInterceptor(eventalias,EventManager.Interceptor.BEFORE,params,scope);
          ?77 ????????????? if ( typeof (params) == 'undefined') {
          ?78 ?????????????????bindevent.apply( this ,[event]);
          ?79 ?????????????}

          ?80 ????????????? else {
          ?81 ?????????????????params.push(event);
          ?82 ?????????????????bindevent.apply( this ,params);
          ?83 ?????????????}

          ?84 ?????????????EventManager.invokeInterceptor(eventalias,EventManager.Interceptor.AFTER,params,scope);
          ?85 ?????????}

          ?86 ????????? catch (e) {
          ?87 ????????????? // ?不做任何提示
          ?88 ?????????????alert(e);
          ?89 ?????????}

          ?90 ?????}

          ?91 ?}

          ?92 ?
          ?93 ? // ?事件的調用(用于綁定到元素的事件上)
          ?94 ?EventManager.invoke = function (eventalias,params,scope) {
          ?95 ????? return ? function () {
          ?96 ?????????EventManager.directyinvoke(eventalias,params,scope);
          ?97 ?????}

          ?98 ?}

          ?99 ?
          100 ? // ?執行攔截器
          101 ?EventManager.invokeInterceptor = function (eventalias,type,params,scope) {
          102 ????? if (EventManager.interceptors[scope] == null ) {
          103 ????????? return ;
          104 ?????}

          105 ????? var ?interceptors = EventManager.interceptors[scope][eventalias];
          106 ????? if ( typeof (interceptors) == 'undefined') {
          107 ????????? return ;
          108 ?????}

          109 ????? var ?typeInterceptors = interceptors[type];
          110 ????? if (typeInterceptors == null ) {
          111 ????????? return ;
          112 ?????}

          113 ????? for ( var ?i = 0 ;i < typeInterceptors.length;i ++ ) {
          114 ????????? try {
          115 ????????????? if ( typeof (params) == 'undefined') {
          116 ?????????????????typeInterceptors[i].apply( this ,[event]);
          117 ?????????????}

          118 ????????????? else {
          119 ?????????????????params.push(event);
          120 ?????????????????typeInterceptors[i].apply( this ,params);
          121 ?????????????}

          122 ?????????}

          123 ????????? catch (e) {
          124 ?????????????alert(e);
          125 ?????????}

          126 ?????}

          127 ?}

          128 ?
          129 ? // ?注冊方法執行前的攔截器
          130 ?EventManager.addBeforeInterceptor = function (eventalias,interceptor,scope) {
          131 ?????EventManager.addInterceptor(eventalias,interceptor,EventManager.Interceptor.BEFORE,scope);
          132 ?}

          133 ?
          134 ? // ?刪除方法執行前的攔截器
          135 ?EventManager.removeBeforeInterceptor = function (eventalias,interceptor,scope) {
          136 ?????EventManager.removeInterceptor(eventalias,interceptor,EventManager.Interceptor.BEFORE,scope);
          137 ?}

          138 ?
          139 ? // ?注冊方法執行后的攔截器
          140 ?EventManager.addAfterInterceptor = function (eventalias,interceptor,scope) {
          141 ?????EventManager.addInterceptor(eventalias,interceptor,EventManager.Interceptor.AFTER,scope);
          142 ?}

          143 ?
          144 ? // ?刪除方法執行后的攔截器
          145 ?EventManager.removeAfterInterceptor = function (eventalias,interceptor,scope) {
          146 ?????EventManager.removeInterceptor(eventalias,interceptor,EventManager.Interceptor.AFTER,scope);
          147 ?}

          148 ?
          149 ? // ?添加攔截器
          150 ?EventManager.addInterceptor = function (eventalias,interceptor,type,scope) {
          151 ????? if ( typeof (scope) == 'undefined') {
          152 ?????????scope = EventManager.Constant.SCOPE;
          153 ?????}

          154 ????? if (EventManager.interceptors[scope] == null ) {
          155 ?????????EventManager.interceptors[scope] = {} ;
          156 ?????}

          157 ????? var ?interceptors = EventManager.interceptors[scope][eventalias];
          158 ????? if (interceptors == null ) {
          159 ?????????interceptors = {} ;
          160 ?????}

          161 ????? if (interceptors[type] == null ) {
          162 ?????????interceptors[type] = new ?Array();
          163 ?????}

          164 ?????interceptors[type].push(interceptor);
          165 ?????EventManager.interceptors[scope][eventalias] = interceptors;
          166 ?}

          167 ?
          168 ? // ?刪除攔截器
          169 ?EventManager.removeInterceptor = function (eventalias,interceptor,type,scope) {
          170 ????? if ( typeof (scope) == 'undefined') {
          171 ?????????scope = EventManager.Constant.SCOPE;
          172 ?????}

          173 ????? if (EventManager.interceptors[scope] == null ) {
          174 ????????? return ;
          175 ?????}

          176 ????? var ?interceptors = EventManager.events[scope][eventalias];
          177 ????? if (interceptors == null ) {
          178 ????????? return ;
          179 ?????}

          180 ????? if (interceptors[type] == null ) {
          181 ????????? return ;
          182 ?????}

          183 ?????interceptors[type].pop(interceptor);
          184 ?????EventManager.interceptors[scope][eventalias] = interceptors;
          185 ?}

          posted on 2006-03-29 16:17 BlueDavy 閱讀(1744) 評論(0)  編輯  收藏 所屬分類: Javascript

          公告

           









          feedsky
          抓蝦
          google reader
          鮮果

          導航

          <2006年3月>
          2627281234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          統計

          隨筆分類

          隨筆檔案

          文章檔案

          Blogger's

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 奇台县| 通化市| 札达县| 西宁市| 文成县| 大安市| 禹州市| 镇宁| 大冶市| 江川县| 天镇县| 许昌县| 凤山县| 金平| 静安区| 西贡区| 繁峙县| 大庆市| 克东县| 孝昌县| 泰宁县| 龙口市| 阿勒泰市| 哈巴河县| 来凤县| 阳曲县| 龙川县| 西贡区| 罗源县| 梁河县| 体育| 德庆县| 谢通门县| 右玉县| 黑龙江省| 苏州市| 兖州市| 三门峡市| 柳江县| 南雄市| 会泽县|