|
Observable维护了一个events数组,并提供了更加方便的对于事件的封装和调用机制。同Event一样,它也提供了addListener、removeListener方法。它提供的addListenere方法使用起来更加方便,你可以通过json对象一次实现多个事件的绑定: foo.addListener({ 'click' : { fn: this.onClick, scope: this, delay: 100 }, 'mouseover' : { fn: this.onMouseOver, scope: this }, 'mouseout' : { fn: this.onMouseOut, scope: this } }) 如果你看一下源程序,你会发现,实际上,observable最终还是把事件绑定机制委托到Event对象上: addListener : function(eventName, fn, scope, o){ //如果参数是一个json对象 if(typeof eventName == "object"){ o = eventName; for(var e in o){ if(this.filterOptRe.test(e)){ continue; } if(typeof o[e] == "function"){ // shared options this.addListener(e, o[e], o.scope, o); }else{ // individual options this.addListener(e, o[e].fn, o[e].scope, o[e]); } } return; } o = (!o || typeof o == "boolean") ? {} : o; eventName = eventName.toLowerCase(); var ce = this.events[eventName] || true; if(typeof ce == "boolean"){ //事件不存在则新建一个Event对象并把它纳入event数组 ce = new Ext.util.Event(this, eventName); this.events[eventName] = ce; } //调用event的addListener方法 ce.addListener(fn, scope, o); } 除了支持addListener方法,Obserable还提供了一个addEvent方法,通过该方法,Observable可以绑定多个不包含处理句柄的Event对象: addEvents : function(o){ if(!this.events){ this.events = {}; } if(typeof o == 'string'){ for(var i = 0, a = arguments, v; v = a; i++){ if(!this.events[a]){ o[a] = true; } } }else{ Ext.applyIf(this.events, o); } },
为了方便使用,observable对addListener和removeListener提供了一个更加简洁的所写:on和un: Ext.util.Observable.prototype.on = Ext.util.Observable.prototype.addListener; Ext.util.Observable.prototype.un = Ext.util.Observable.prototype.removeListener; 你可以通过suspendEvents和resumeEvents方法随时对于事件进行暂停和继续: suspendEvents : function(){ this.eventsSuspended = true; }, resumeEvents : function(){ this.eventsSuspended = false; }, 当然,通过fireEvent方法,你可以触发制定的事件: fireEvent : function(){ if(this.eventsSuspended !== true){ //arguments[0]就是你需要触发的事件 var ce = this.events[arguments[0].toLowerCase()]; if(typeof ce == "object"){ return ce.fire.apply(ce, Array.prototype.slice.call(arguments, 1)); } } return true; },
Observable还通过capture和releaseCapture提供了对于事件处理函数的拦截机制: Ext.util.Observable.capture = function(o, fn, scope){ o.fireEvent = o.fireEvent.createInterceptor(fn, scope); }; Ext.util.Observable.releaseCapture = function(o){ o.fireEvent = Ext.util.Observable.prototype.fireEvent; };
|
一共有 14 条评论
[url=http://www.drxbw.cn/]保温材料[/url]
[url=http://www.daishusheying.com/]儿童摄影[/url]
[url=http://www.qasd2008.com/]易拉宝[/url]
[url=http://www.qasd2008.com/]北京易拉宝[/url]
[url=http://www.qasd2008.com/]北京展台[/url]
[url=http://www.qasd2008.com/]拉网展架[/url]
[url=http://www.qasd2008.com/]x展架[/url]
[url=http://www.ccckyb.com/]液位计[/url]
[url=http://www.ccckyb.com/prohtml_2/cfb.htm]超声波液位计[/url]
[url=http://www.jiulonghengye.com/]货架[/url]
[url=http://www.jiulonghengye.com/Chinese/Index.asp]货架厂[/url]
[url=http://www.drxbw.cn/]挤塑板[/url]
[url=http://www.piao180.com/]国家大剧院演出票[/url]
[url=http://www.piao180.com/]票务网[/url]
[url=http://www.piao180.com/]票务[/url]
[url=http://www.piao180.com/]中国票务网[/url]
[url=http://www.piao180.com/]中国票务在线[/url]
[url=http://www.piao180.com/]中山音乐堂[/url]
[url=http://www.tnbz.org.cn/]褥疮[/url]
[url=http://www.tnbz.org.cn/]糖尿病足[/url]
[url=http://www.bjsac.net/]防静电地板[/url]
[url=http://www.bj-shenran.com/]磁流体[/url]
[url=http://www.xinyangguang.net/]真皮座套[/url]
[url=http://www.famenbj.cn/]上海阀门[/url]
[url=http://www.famenbj.cn/]北京阀门[/url]
[url=http://www.famenbj.cn/]阀门[/url]
[url=http://www.xieziloubj.cn/]北京搬家[/url]
[url=http://www.jiuhuatijian.com.cn/baijinka.aspx]九华山庄体检中心[/url]
[url=http://www.mlpowerleveling.com/]wow gold[/url]
[url=http://www.Google0508.cn/yb/]月饼[/url]
[url=http://www.Google0508.cn/yb/]月饼团购[/url]
[url=http://www.yuesao58.cn/ys/]月嫂[/url]
[url=http://www.yuesao58.cn/ys/]北京月嫂[/url]
[url=http://www.ccckyb.com/]压力变送器[/url]
[url=http://www.ccckyb.com/]液位变送器[/url]
[url=http://www.mjxianhua.com/]北京鲜花[/url]
[url=http://www.mjxianhua.com/]鲜花订购[/url]
[url=http://www.mjxianhua.com/]鲜花[/url]
[url=http://www.mjxianhua.com/]鲜花预订[/url]
[url=http://www.ccckyb.com/]料位开关[/url]
[url=http://www.ccckyb.com/prohtml_2/cfb.htm]磁翻板液位计[/url]
[url=http://www.ccckyb.com/prohtml_2/fqywj.htm]浮球液位计[/url]
[url=http://www.piao180.com/piaolist.asp?id=28]中国国家大剧院[/url]
[url=http://www.piao180.com/piaolist.asp?id=2]保利剧院[/url]
[url=http://www.piao180.com/piaolist.asp?id=28]国家大剧院[/url]
[url=http://www.piao180.com/piaolist.asp?id=28]国家大剧院演出[/url]
[url=http://www.piao180.com/piaolist.asp?id=28]国家大剧院订票[/url]
[url=http://www.bjxhmj.com/ssyxyh.html]标志设计[/url]
[url=http://www.bjxhmj.com/ssyxyh.html]包装设计[/url]
[url=http://www.bjxhmj.com/]网页设计[/url]
[url=http://www.bjxhmj.com/]网站设计[/url]
[url=http://www.bjxhmj.com/]网站建设[/url]
[url=http://www.Google0508.cn/wzjs.html]Google优化[/url]
[url=http://www.Google0508.cn/wzjs.html]百度优化[/url]
[url=http://www.Google0508.cn/wzjs.html]整站优化[/url]
[url=http://www.Google0508.cn/]Google排名[/url]
[url=http://www.Google0508.cn/]网站推广[/url]
[url=http://www.xinyongka09.cn/]西班牙留学[/url]
[url=http://www.xinyongka09.cn/]韩国留学[/url]
[url=http://www.xinyongka09.cn/]留学韩国[/url]
[url=http://www.xinyongka09.cn/]日本留学[/url]
[url=http://www.xinyongka09.cn/fillbuy.asp]瑞士留学[/url]
[url=http://www.xinyongka09.cn/news.asp]法国留学[/url]
[url=http://www.xinyongka09.cn/news.asp]留学法国[/url]
[url=http://www.xinyongka09.cn/news.asp]澳洲留学[/url]
[url=http://www.xinyongka09.cn/news.asp]留学澳洲[/url]
[url=http://www.xinyongka09.cn/art.asp]澳大利亚留学[/url]
[url=http://www.xinyongka09.cn/art.asp]留学澳大利亚[/url]
[url=http://www.xinyongka09.cn/art.asp]加拿大留学[/url]
[url=http://www.xinyongka09.cn/art.asp]留学加拿大[/url]
[url=http://www.xinyongka09.cn/fillbuy.asp]留学瑞士[/url]
[url=http://www.xinyongka09.cn/fillbuy.asp]意大利留学[/url]
[url=http://www.xinyongka09.cn/fillbuy.asp]留学意大利[/url]
[url=http://www.gdstbj.cn/]管道疏通[/url]
[url=http://www.gdstbj.cn/qxgd.htm]抽粪[/url]
[url=http://www.gdstbj.cn/qxgd.htm]北京抽粪[/url]
[url=http://www.gdstbj.cn/qxgd.htm]环卫抽粪[/url]
[url=http://www.gdstbj.cn/qxgd.htm]疏通马桶[/url]
[url=http://www.gdstbj.cn/fufw.htm]北京清理化粪池[/url]
[url=http://www.gdstbj.cn/fufw.htm]高压清洗[/url]
[url=http://www.gdstbj.cn/bjgdst.htm]北京疏通下水道[/url]
[url=http://www.gdstbj.cn/qxgd.htm]北京疏通马桶[/url]
[url=http://www.gdstbj.cn/gdst.htm]北京崇文区管道疏通[/url]
[url=http://www.gdstbj.cn/bjgdst.htm]北京宣武区管道疏通[/url]
[url=http://www.datang58.com/hq/]婚庆公司[/url]
[url=http://www.datang58.com/hq/]北京婚庆[/url]
[url=http://www.datang58.com/hq/]北京婚庆公司[/url]
正在读代码!
if(!this.events){
this.events = {};
}
if(typeof o == 'string'){
for(var i = 0, a = arguments, v; v = a; i++){
if(!this.events[a]){
o[a] = true;
}
}
}else{
Ext.applyIf(this.events, o);
}
},
中间部分的for循环处,抄错了.
而且原来的代码好像也是出错了,没有任何实际意义.
而最后的地方Ext.apply这个,个人认为更是设计上的错误,本来addListener内部实现了比较复杂的算法,包装了Event(Event类从设计上看还是个内部类),但是这里却要直接的灌入,破坏了设计思路.