`

【Extjs学习四】Extjs2事件机制源码分析图解

阅读更多
EXT将事件分为了两种:自定义事件与浏览器事件。

自定义事件:
按字面意思就是用户自己定义的事件,这个事件通常与组件相关。并且需要用户根据组件的状态自己触发。相关的类Ext.util.Observable 、Ext.util.Event(Observable.js)。Ext.util.Observable是所有组件(component)的父类,它使得所有的组件都可以任意的添加自定义事件,它的events属性对事件进行维护,这些事件实际都是Ext.util.Event对象,Ext.util.Event对象里的listeners属性对与该事件相关的处理器进行维护。Observable给所有的子类提供了一个统一的接口来发布事件以及管理事件,这一特性对于组件来说是至关重要的。

浏览器事件
即传统意义上的鼠标单击、移动等等事件,这些事件是由浏览器根据用户的动作自己触发的,与页面元素紧密关联。相关的类Ext.Element 、Ext.EventManager、Ext.EventObject、Ext.lib.Event 。Element包含了常见的DOM方法和属性,提供一个快捷的、统一的、跨浏览器的接口,内置了常用的DOM节点的动作,并且是跨浏览器的定位的位置、大小、动画、拖放等等。对事件的处理,Element实际将这一处理委托给了EventManager,由EventManager对页面所有的浏览器事件进行管理,例如增加事件处理器、移除事件处理器等等,另外EventManager还定义了几个很重要的方法:onDocumentReady、onWindowResize、onTextResize。其中onDocumentReady尤为重要,通常在页面需要通过它来启动我们的AJAX程序,它会在页面document渲染完毕而图片等还未下载时调用我们的启动函数。至于EventObject,它则是对原始的浏览器事件进行了封装,提供给事件处理器一个统一一致的事件接口。Ext.lib.Event呢?EventManager的很多功能其实是调用它完成的,它的listeners、unloadListeners维护着所有的事件处理器。统一维护的好处之一就是在页面unload的时候可以统一干掉它们,避免内存泄露。

 

我感觉理解得还不错;

 

ext代码机制核心部分只需要了解ext.util.event 和obserable 应该这2个类不像浏览器事件需要hack各个浏览器的差异。

 

对整个事件的分析见附件图片,经过分析,我感觉ext的事件机制有如下几个问题:

1、ext.lib.event 不支持一个元素同一事件监听多个函数,即不支持堆栈调用,举例如下:

el.on('click',fn1);

el.on('click',fn2);

我希望是执行function(){

fn1();

fn2();

}();

目前是执行function(){

fn2();

}();

 

但是我也不知道这个功能有没有必要。

 

2、ext.eventobject 虽说是针对ext.lib.event的扩展,抽象了keycode在各浏览器的表现,增加了一些方法,但是缺少event.lib.event的on和un方法,从代码分层的角度来看,感觉不好。

 

3、ext.eventobject依赖了ext.element上的方法,从ext整个代码的分层来看,最合理的方式应该是ext为基础,ext.util为基础2,ext.lib为基础3,element为基础4,其他widget应该是在这个基础上进行的扩展。现在ext的代码给我的感觉分层不是很清晰。

 

4、事件机制没有保持一致,Element其实可以继承obserable,如果不继承也可以保证两者接口一致

 

 

ps:javaeye怎么上传的emf格式图片firefox下看不到呢?

 

 

  • 大小: 21 KB
分享到:
评论
1 楼 hellofz 2008-09-11  
1、ext.lib.event 不支持一个元素同一事件监听多个函数,即不支持堆栈调用,举例如下:

el.on('click',fn1);

el.on('click',fn2);

我就是不喜欢EXT的这一特点,每次都被覆盖掉。

相关推荐

    Extjs源码之--Ext事件机制/继承关系

    EXTJS的事件处理主要由EventManager.js这个文件负责,它是EXTJS事件系统的基础。 首先,EXTJS的事件机制基于观察者模式,即事件发布者(Publisher)发出事件,而事件订阅者(Subscriber)监听并响应这些事件。Event...

    ExtJS3.0 源码分析与开发实例宝典

    ExtJS3.0 源码分析与开发实例宝典

    extjs4 学习笔记源码

    exjts4 学习笔记源码,源码包含windws,hbox,vbox和Grid的应用,其中grid介绍比较多。下载解压后,部署后就可以使用,所有代码均在demo文件夹下。更多extjs4教程,请关注http://www.mhzg.net

    extjs资料以及extjs学习指南

    extjs资料以及extjs学习指南,extjs资料以及extjs学习指南

    ExtJS源码分析与开发实例宝典

    资源名称:Ext JS源码分析与开发实例宝典内容简介:本书全面系统地剖析了ExtJS 3.0的架构设计原理。通过对源码的“抽丝剥茧”,读者可以掌握Ext JS架构的精妙,从原理层面用活Ext JS。此外,本书还提出了大量的解决...

    EXTJS事件实例源码

    EXTJS事件实例源码的学习可以帮助我们掌握以下关键知识点: 1. **事件监听与触发**:EXTJS中的每个组件都拥有自己的事件系统,可以通过`addListener`(或简写`on`)方法来监听事件,`fireEvent`方法来触发事件。...

    资料:包括extjs2.0源码

    2. **数据绑定**:EXTJS 2.0引入了双向数据绑定机制,使得UI组件的状态能够自动与数据源保持同步,简化了数据管理的复杂性。数据绑定允许开发者专注于业务逻辑,而不是繁琐的DOM操作。 3. **布局管理**:EXTJS 2.0...

    extjs 学习心得笔记

    3. **组件事件处理**:熟悉ExtJS中的事件机制,学会如何为组件添加事件监听器,这对于响应用户交互、更新数据模型等操作非常重要。 4. **数据绑定与模型使用**:掌握ExtJS的数据绑定机制,了解如何使用模型(Model)...

    ExtJS源码分析与开发实例宝典2.pdf

    2、ExtJS源码分析与开发实例宝典.pdf.[4].1 3、ExtJS源码分析与开发实例宝典.pdf.[4].2 4、ExtJS源码分析与开发实例宝典.pdf.[4].3 5、ExtJS源码分析与开发实例宝典.pdf.[4].4 ExtJS源码分析与开发实例宝典.pdf.bat...

    ExtJs源码

    extjs 源码,有兴趣的可以学习下

    界面框架extjs学习笔记

    2. `build`:这个目录下存储的是经过压缩的EXTJS完整源码,适合在生产环境中使用以减少页面加载时间。 3. `docs`:API文档存放的地方,开发者可以参考这些文档了解EXTJS的各种类和方法。 4. `examples`:包含了...

    extjs 源码

    通过对EXTJS 3.0源码的学习,开发者不仅可以提升EXTJS的应用能力,还能掌握JavaScript面向对象编程、事件驱动编程等技术,为构建高效、美观的Web应用打下坚实基础。同时,EXTJS 3.0的源码也反映了早期Web开发的一些...

    extJs 2.1学习笔记

    23. extJs 2.0学习笔记(Ext.Panel篇四) 62 24. extJs 2.0学习笔记(组件总论篇) 66 25. extJs 2.0学习笔记(Ext.Element API总结) 69 26. extJs 2.0学习笔记(Element.js篇) 73 27. extJs 2.0学习笔记(DomHelper.js篇) ...

    EXTJS修改颜色实例源码

    在提供的实例源码中,我们看到的是如何在 EXTJS 中修改颜色的示例,具体涉及到 EXTJS 的 FormPanel 和 ComboBox 组件,以及自定义事件处理。 1. **FormPanel**: - `Ext.form.FormPanel` 是 EXTJS 中用于创建表单...

    ExtJs 4 MVC 新机制测试源码奉献

    ExtJs 4 用了一段时间了,今天研究了下ExtJs4的MVC机制,感觉还挺好,建议大家尝试,所以就写了一个demo,帮助那些对ExtJs还不是很懂,或者想用ExtJs4却又不知道怎么做好的朋友。。。多余话不说了大家如果有什么不...

    ExtJS源码分析与开发实例宝典.part10(带书签)

    Ext+JS源码分析与开发实例宝典 是extjs3.0的学习书 书得内容很不错。深入解析extjs 资源是pdf文档. 本人自己还做了pdf的完整书签目录,便于方便和阅读. 文档比较大,一共压缩成12卷.需12卷全部下载完。 就第一个...

    EXTJS源码分析与开发实例宝典-开发的效果图.rar

    在EXTJS的源码分析部分,读者可以学习到EXTJS的架构设计,如MVC模式的应用、事件处理机制、组件生命周期等。EXTJS的组件系统是其核心,通过源码分析,开发者可以理解如何自定义组件,优化性能,以及解决在实际开发中...

    extjs4学习文档

    EXTJS4的学习文档还包括更多关于组件、布局、数据绑定、事件处理等方面的详细内容,这些都是构建EXTJS应用不可或缺的知识。通过深入学习和实践,开发者可以熟练掌握EXTJS4,创建功能丰富的Web应用程序。

    ExtJS学习资料手册

    ExtJS学习手册。。。。,帮助学习extjx的朋友。。

    Extjs教程源码

    第七讲: EXTJS4.0的事件机制Event 第八讲: EXTJS4.0的Ajax 第九讲: EXTJS4.0的Core包和Ext类 第十讲: EXTJS4.0的Util包 ***************第二部分高级组件**************** 第十一讲: EXTJS4.0的高级组件Grid(上) 第...

Global site tag (gtag.js) - Google Analytics