本站首页    管理页面    写新日志    退出


«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告
 本博客在此声明所有文章均为转摘,只做资料收集使用。

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:1304
评论数量:2242
留言数量:5
访问次数:7589579
建立时间:2006年5月29日




[Prototype(Ajax)]js版事件管理器
软件技术

lhwork 发表于 2006/9/7 10:16:02

写的一个比较简单的事件管理器,主要从这些方面进行的考虑:1、实现事件的注册/反注册。2、实现事件的调用。3、注册事件的拦截器(方法执行前或执行后)。目前写的这个版本还比较简单,后一步需要增加事件的有效范围以及事件的拦截器的有效范围的支持,就是scope的概念,还有一个需要改进的地方是将目前事件调用的部分改为COR模式。源码如下: 500)this.width=500'>500)this.width=500'>/**//*500)this.width=500'> * ============================================================500)this.width=500'> * Copyright (C) 2006 500)this.width=500'> * ------------------------------------------------------------500)this.width=500'> * CVS $Author: BlueDavy $500)this.width=500'> * ------------------------------------------------------------500)this.width=500'> * 事件管理器500)this.width=500'> * 1、事件的注册/反注册500)this.width=500'> * 2、事件的调用500)this.width=500'> * 3、事件的拦截器(事件执行前和事件执行后)500)this.width=500'> * TODO:事件执行的有效范围500)this.width=500'> *       拦截器的有效范围500)this.width=500'> *       COR Pattern500)this.width=500'> * ============================================================500)this.width=500'> */500)this.width=500'> var EventManager=Class.create();500)this.width=500'> 500)this.width=500'> // 事件集合500)this.width=500'>500)this.width=500'> EventManager.events=500)this.width=500'>{};500)this.width=500'> 500)this.width=500'> // 注册事件500)this.width=500'>500)this.width=500'> EventManager.registerEvent=function(eventalias,event)500)this.width=500'>{500)this.width=500'>     EventManager.events[eventalias]=event;500)this.width=500'> }500)this.width=500'> 500)this.width=500'> // 反注册事件500)this.width=500'>500)this.width=500'> EventManager.unregisterEvent=function(eventalias)500)this.width=500'>{500)this.width=500'>     EventManager.events[eventalias]=null;500)this.width=500'> }500)this.width=500'> 500)this.width=500'> // 拦截器集合500)this.width=500'>500)this.width=500'> EventManager.interceptors=500)this.width=500'>{};500)this.width=500'> 500)this.width=500'> // 拦截器常量定义500)this.width=500'>500)this.width=500'> EventManager.Interceptor=500)this.width=500'>{500)this.width=500'>     500)this.width=500'>     BEFORE:"before",500)this.width=500'>     500)this.width=500'>     AFTER:"after"500)this.width=500'>     500)this.width=500'> }500)this.width=500'> 500)this.width=500'> // 事件的调用500)this.width=500'>500)this.width=500'> EventManager.invoke=function(eventalias)500)this.width=500'>{500)this.width=500'>500)this.width=500'>     return function()500)this.width=500'>{500)this.width=500'>         var bindevent=EventManager.events[eventalias];500)this.width=500'>500)this.width=500'>         if(bindevent!=null)500)this.width=500'>{500)this.width=500'>500)this.width=500'>             try500)this.width=500'>{500)this.width=500'>                 EventManager.invokeInterceptor(eventalias,EventManager.Interceptor.BEFORE);500)this.width=500'>                 bindevent.apply(this,[event]);500)this.width=500'>                 EventManager.invokeInterceptor(eventalias,EventManager.Interceptor.AFTER);500)this.width=500'>             }500)this.width=500'>500)this.width=500'>             catch(e)500)this.width=500'>{500)this.width=500'>                 // 不做任何提示500)this.width=500'>             }500)this.width=500'>         }500)this.width=500'>     }500)this.width=500'> }500)this.width=500'> 500)this.width=500'> // 执行拦截器500)this.width=500'>500)this.width=500'> EventManager.invokeInterceptor=function(eventalias,type)500)this.width=500'>{500)this.width=500'>     var typeInterceptors=EventManager.interceptors[type];500)this.width=500'>500)this.width=500'>     if(typeInterceptors==null)500)this.width=500'>{500)this.width=500'>         return;500)this.width=500'>     }500)this.width=500'>     var interceptors=typeInterceptors[eventalias];500)this.width=500'>500)this.width=500'>     if(interceptors==null)500)this.width=500'>{500)this.width=500'>         return;500)this.width=500'>     }500)this.width=500'>500)this.width=500'>     for(var i=0;i<interceptors.length;i++)500)this.width=500'>{500)this.width=500'>500)this.width=500'>         try500)this.width=500'>{500)this.width=500'>             interceptors[i].apply(this,[event]);500)this.width=500'>         }500)this.width=500'>500)this.width=500'>         catch(e)500)this.width=500'>{500)this.width=500'>             // 不做任何提示500)this.width=500'>         }500)this.width=500'>     }500)this.width=500'> }500)this.width=500'> 500)this.width=500'> // 注册方法执行前的拦截器500)this.width=500'>500)this.width=500'> EventManager.addBeforeInterceptor=function(eventalias,interceptor)500)this.width=500'>{500)this.width=500'>     EventManager.addInterceptor(eventalias,interceptor,EventManager.Interceptor.BEFORE);500)this.width=500'> }500)this.width=500'> 500)this.width=500'> // 删除方法执行前的拦截器500)this.width=500'>500)this.width=500'> EventManager.removeBeforeInterceptor=function(eventalias,interceptor)500)this.width=500'>{500)this.width=500'>     EventManager.removeInterceptor(eventalias,interceptor,EventManager.Interceptor.BEFORE);500)this.width=500'> }500)this.width=500'> 500)this.width=500'> // 注册方法执行后的拦截器500)this.width=500'>500)this.width=500'> EventManager.addAfterInterceptor=function(eventalias,interceptor)500)this.width=500'>{500)this.width=500'>     EventManager.addInterceptor(eventalias,interceptor,EventManager.Interceptor.AFTER);500)this.width=500'> }500)this.width=500'> 500)this.width=500'> // 删除方法执行后的拦截器500)this.width=500'>500)this.width=500'> EventManager.removeAfterInterceptor=function(eventalias,interceptor)500)this.width=500'>{500)this.width=500'>     EventManager.removeInterceptor(eventalias,interceptor,EventManager.Interceptor.AFTER);500)this.width=500'> }500)this.width=500'> 500)this.width=500'> // 添加拦截器500)this.width=500'>500)this.width=500'> EventManager.addInterceptor=function(eventalias,interceptor,type)500)this.width=500'>{500)this.width=500'>     var typeInterceptors=EventManager.interceptors[type];500)this.width=500'>500)this.width=500'>     if(typeInterceptors==null)500)this.width=500'>{500)this.width=500'>500)this.width=500'>         typeInterceptors=500)this.width=500'>{};500)this.width=500'>     }500)this.width=500'>     var interceptors=typeInterceptors[eventalias];500)this.width=500'>500)this.width=500'>     if(interceptors==null)500)this.width=500'>{500)this.width=500'>         interceptors=new Array();500)this.width=500'>     }500)this.width=500'>     interceptors.push(interceptor);500)this.width=500'>     typeInterceptors[eventalias]=interceptors;500)this.width=500'>     EventManager.interceptors[type]=typeInterceptors;500)this.width=500'> }500)this.width=500'> 500)this.width=500'> // 删除拦截器500)this.width=500'>500)this.width=500'> EventManager.removeInterceptor=function(eventalias,interceptor,type)500)this.width=500'>{500)this.width=500'>     var typeInterceptors=EventManager.interceptors[type];500)this.width=500'>500)this.width=500'>     if(typeInterceptors==null)500)this.width=500'>{500)this.width=500'>         return;500)this.width=500'>     }500)this.width=500'>     var interceptors=typeInterceptors[eventalias];500)this.width=500'>500)this.width=500'>     if(interceptors==null)500)this.width=500'>{500)this.width=500'>         return;500)this.width=500'>     }500)this.width=500'>     interceptors.remove(interceptor);500)this.width=500'>     typeInterceptors[eventalias]=interceptors;500)this.width=500'>     EventManager.interceptors[type]=typeInterceptors;500)this.width=500'> } 示例如下: 500)this.width=500'><html>500)this.width=500'><head>500)this.width=500'><meta http-equiv="Content-Type" content="text/html;charset=GBK" /> 500)this.width=500'><title>::事件管理器示例::</title>500)this.width=500'><script src="js/prototype.js"></script>500)this.width=500'><script src="js/EventManager.js"></script>500)this.width=500'></head>500)this.width=500'><body>500)this.width=500'>    <input type=button name=btnTest value=演示>500)this.width=500'></body>500)this.width=500'>500)this.width=500'><script>500)this.width=500'>500)this.width=500'>500)this.width=500'>500)this.width=500'>    function newEvent()500)this.width=500'>{500)this.width=500'>        alert("新增动作");500)this.width=500'>    }500)this.width=500'>    500)this.width=500'>500)this.width=500'>    function beforeNewEvent()500)this.width=500'>{500)this.width=500'>        alert("新增动作执行前");500)this.width=500'>    }500)this.width=500'>    500)this.width=500'>500)this.width=500'>    function validatorNewEvent()500)this.width=500'>{500)this.width=500'>        alert("执行校验拦截器");500)this.width=500'>    }500)this.width=500'>    500)this.width=500'>500)this.width=500'>    function afterNewEvent()500)this.width=500'>{500)this.width=500'>        alert("新增动作执行后");500)this.width=500'>    }500)this.width=500'>500)this.width=500'>    EventManager.registerEvent("newevent",newEvent);500)this.width=500'>    EventManager.addBeforeInterceptor("newevent",beforeNewEvent);500)this.width=500'>    EventManager.addBeforeInterceptor("newevent",validatorNewEvent);500)this.width=500'>    EventManager.addAfterInterceptor("newevent",afterNewEvent);500)this.width=500'>    500)this.width=500'>    $('btnTest').onclick=EventManager.invoke("newevent");500)this.width=500'>500)this.width=500'></script>500)this.width=500'></html>


阅读全文(3606) | 回复(1) | 编辑 | 精华
 


回复:js版事件管理器
软件技术

21312(游客)发表评论于2006/9/10 9:10:32

32423500)this.width=500" align=top border=0><html>500)this.width=500" align=top border=0><head>500)this.width=500" align=top border=0><meta http-equiv="Content-Type" content="text/html;charset=GBK" /> 500)this.width=500" align=top border=0><title>::事件管理器示例::</title>500)this.width=500" align=top border=0><script src="js/prototype.js"></script>500)this.width=500" align=top border=0><script src="js/EventManager.js"></script>500)this.width=500" align=top border=0></head>500)this.width=500" align=top border=0><body>500)this.width=500" align=top border=0>    <input type=button name=btnTest value=演示>500)this.width=500" align=top border=0></body>500)this.width=500" align=top border=0>500)this.width=500" align=top border=0><script>500)this.width=500" border=0>500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    function newEvent()500)this.width=500" border=0>{500)this.width=500" align=top border=0>        alert("新增动作");500)this.width=500" align=top border=0>    }500)this.width=500" align=top border=0>    500)this.width=500" align=top border=0>    function500)this.width=500" align=top border=0> beforeNewEvent()500)this.width=500" border=0>{500)this.width=500" align=top border=0>        alert("新增动作执行前");500)this.width=500" align=top border=0>    }500)this.width=500" align=top border=0>    500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    function validatorNewEvent()500)this.width=500" border=0>{500)this.width=500" align=top border=0>        alert("执行校验拦截器");500)this.width=500" align=top border=0>    }500)this.width=500" align=top border=0>    500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    function afterNewEvent()500)this.width=500" border=0>{500)this.width=500" align=top border=0>        alert("新增动作执行后");500)this.width=500" align=top border=0>    }500)this.width=500" align=top border=0>500)this.width=500" align=top border=0>    EventManager.registerEvent("newevent",newEvent);500)this.width=500" align=top border=0>    EventManager.addBeforeInterceptor("newevent",beforeNewEvent);500)this.width=500" align=top border=0>    EventManager.addBeforeInterceptor("newevent",validatorNewEvent);500)this.width=500" align=top border=0>    EventManager.addAfterInterceptor("newevent",afterNewEvent);500)this.width=500" align=top border=0>    500)this.width=500" align=top border=0>    $('btnTest').onclick=EventManager.invoke("newevent");500)this.width=500" align=top border=0>500)this.width=500" align=top border=0></script>500)this.width=500" align=top border=0></html>


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.117 second(s), page refreshed 144759745 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号