connect 函数
dojo.event.connect(handlerNode,"eventName",obj,handler)
功能:
为handlerNode节点绑定事件监听函数,当handlerNode对象的
eventName被触发时,obj的handler函数被触发。
handlerNode可以时DOM对象,也可以时普通定义的js对象。
如果obj跟handlerNode是一个对象时,可以省略。
普通的DOM对象:
handlerNode
var handlerNode=document.getElementById("handler");
handler:handOnclick
before:事件监听函数将在被监听函数之前触发。
around:around监听函数会包含一个参数,是method-invocation对象,这个对象至少包含一个args属性,该属性代表目标方法的参数。该对象还包含一个方法:proceed(),用于调用目标函数,并返回结果。
<script type="text/javascript"> var abc={//定义abc变量 foo:function(var1,var2){//定义abc的foo函数 dojo.hostenv.println("var1的参数值为"+var1); dojo.hostenv.println("var2的参数值为"+var2); return "foo方法的返回值" } } function bar(invocation){ if(invocation.args[0]!="undifined"){ invocation.args[0]="wawa_new----AOP修改后的第一个参数"; } if(invocation.args[1]!="undifined"){ invocation.args[1]="nono---AOP修改后的第二个参数"; } var result=invocation.proceed();//修改参数后,调用目标函数foo result="AOP修改了目标的返回值";//修改返回值 return result; } dojo.event.connect("around",abc,"foo","bar"); dojo.hostenv.println(abc.foo("wawa","nono")); </script>
dojo.event.connect("around",abc,"foo","bar");
利用around事件,bar函数可以改变foo函数的参数值和返回值。
注:after和before事件通过arguments[]也可以访问到被监听方法的参数,但是不能修改.
function handOnclick(evt){ alert("单击我触发的事件"+evt); }
eventName:onclick
Connect函数:
dojo.event.connect(handlerNode,"onclick","handOnclick");
自定义的对象:
var abc={ foo:function(){//定义foo函数 dojo.hostenv.println("abc的foo事件"); }, bar:function(){//定义bar函数 dojo.hostenv.println("abc的bar事件"); } } dojo.event.connect(abc,"foo",abc,"bar");//abc的foo函数被触发时,abc对象的bar函数也执行 abc.foo();
connect的AOP实现:
connect函数还支持一个参数,可以是after,before,arround 默认after。
完整的connect格式:
dojo.event.connect (time,srcobj,"srcFunction",listenerObj,"listennerFunction");