在上一版的基礎上進行了如下改進:
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
?}