ExtJs 架构分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ExtJs 架构分析

理解Ext.util.Event由于Ext2.0中所有的组件都是由Observable继承而来,理解Ext就需要先从Ext.util.Observable说起,而 Observable是对Event对象进行管理,从而理解Observable必须首先从Ext.util.Event说起。 ? Ext.util.Event是一个封装的非常精致的对象,但和你想象的不同,Event同任何的HTML DOM元素没有任何的关系(尽管Ext是处理HTML元素的),实际上,它是一个通用的事件及其事件的处理的对象。 也许有朋友要问,HTML Element本身已经支持了事件,为什么还要再重新设计一套Event机制呢?其实,基本上所有的javascript框架都会实现自己的Event机制,原因很多,但是至少有一点:HTML元素对于事件的处理是通过简单的单一绑定实现,也就是说,如果不进行任何的封装,你的事件只能唯一的绑定到一个事件处理句柄,举个例子: ? var e=document.getElementById(test); ? e.onclick=function(){alert(handle1)}; ? e.onclick=function(){alert(handle2)}; ? 运行的结果你回发现,只会弹出一个handle2的alert框,因为第一个事件已经被第二个事件重载了。而使用Ext框架,你可以放心的解决这个问题,同一个事件可以依次被绑定到多个事件处理句柄上。 ? Ext.util.Event对象构建器需要传入两个对象:obj(处理事件的缺省对象),name(事件名称)。在构建Event对象时,Event对象会同时构建一个事件的处理函数的数组:listeners,通过这个数组实现了一个事件的多个事件句柄函数的处理。 Ext.util.Event = function(obj, name){ ? = name; ? this.obj = obj; ? this.listeners = []; }; 通过Event的fire方法就可以依次触发该数组中的处理函数。实际上,fire方法在遍历listeners数组中的处理函数过程中,只要处理函数的返回值为false,则不再继续运行后续的处理函数。所以,可以通过检查fire方法的返回值得知事件处理函数是否完全被运行。 ? fire : function(){ ? ? var ls = this.listeners, scope, len = ls.length; ? ? if(len 0){ ? ? ? this.firing = true;//通过firing可以保证多个事件处理函数不会并发运行 ? ? ? var args = Atotype.slice.call(arguments, 0);//slice方法可以有效的进行数组的克隆 ? ? ? for(var i = 0; i len; i++){ ? ? ? ? var l = ls; ? ? ? ? //事件的处理,只要有一个处理函数返回false,整个事件处理就被停止 ? ? ? ? if(l.fireFn.apply(l.scope||this.obj||window, arguments) === false){ ? ? ? ? ? this.firing = false; ? ? ? ? ? return false; ? ? ? ? } ? ? ? } ? ? ? this.firing = false; ? ? } ? ? return true; ? } ? Event可以通过addListener、removeListener、clearListeners(移除所有的事件处理函数)方法对 listeners进行管理。但是,Listener中保存的事件处理函数实际上并不是addListener传递的函数,实际上, addListener传入的方法通过createListener对事件的处理函数进行了封装,通过封装,实现了对通一个重复事件的的三种不同处理方式:delay(延迟运行)、single(移除Listener中的处理函数,仅运行当前的处理函数)、buffer(避免重复运行处理函数)。 ? createListener : function(fn, scope, o){ ? ? o = o || {}; ? ? scope = scope || this.obj; ? ? var l = {fn: fn, scope: scope, options: o}; ? ? var h = fn; ? ? if(o.delay){ ? ? ?

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档