第二章 Ext框架基础
2.1自定义事件:
Ext是树状事件模型,所有继承Ext.util.Observable类的控件都可以支持事件。可以为继承了Ext.util.Observable的对象定义一些事件,然后配置监听器。当事件触发,Ext会自动调用对应的监听器。这就是Ext的事件模型。
on()是addListener()的简写,功能一样。第一参数:传递事件名称;第二个参数:事件发生时执行的函数。
动态语言的特有特性:如果想给监听方法传递参数,直接把参数写到fireEvent()里就行。不用管参数数量和类型。不过,需要确保监听函数可以处理传递过去的参数。
on是addListener的简写,removeListener的简写是un,可以删除某个事件对应的监听函数。
purgeListeners()可以把所有的监听器都删除掉。(慎用)
2.1.2 浏览器事件
Ext使用Ext.EventManager、Ext.EventObject和Ext.lib.Event对原生浏览器事件进行封装成一套统一的跨浏览器的通用事件接口。
HTML元素对事件的处理是通过简单的单一绑定实现的。也就是说,如果不进行任何封装,事件只能绑定到一个事件处理句柄。使用Ext,同一个事件可以依次绑定到多个事件处理句柄上。
Ext.get('id')获得HTML中id=‘id’的元素。
2.1.3 Ext.lib.Event
Ext.lib.Event是定义在adapter中的工具栏,封装了不同浏览器的事件处理函数,为上层组件提供了统一的功能接口。
Ext.lib.Event中定义的主要函数:
getX(),getY(),getXY()获得发生事件在页面中的坐标位置;
getTarget()返回事件的目标元素
on()、un()绑定、解除事件监听函数。purgeElement()函数会把元素上的所有事件都清楚。?上面说的是purgeListeners()
preventDefault()取消浏览器对当前事件所执行的默认操作。比如,在自定义右击菜单时可以防止单击鼠标右键时弹出浏览器自身的右键菜单。
stopPropagation()停止事件传递。
stopEvent()停止一个事件。内部调用了preventDefault()和stopPropagation()两个函数,取消了浏览器的默认操作;同时停止事件传递。
onAvailable(id,fn,scope)等到id对应的HTML元素可用时执行fn这个函数,scope表示调用函数的作用域。(里面使用setInterval()循环检测id对应的HTML元素,直到它可用时才停止循环执行fn函数)
resolveTextNode()如果参数node是一个文本节点,就返回上层节点;否则,返回node本身。(这个函数是getTarg()函数中使用的工具函数)
getRelatedTarget()返回事件相关的HTML元素。
2.1.4 Ext.util.Observable
实现一个可以处理事件的Ext组件最直接的方法就是继承Ext.util.Observable
当addListener/on用于注册事件时,可以使用复合式参数。
注意:buffer和delay都是延迟一段时间后执行对应的监听函数。但是buffer会创建一个Ext.util.DelayTask对象,并把fn放入其中等待执行。在等待过程中,如果再次触发事件,那么上次的任务就会取消,并把新的fn放入任务队列里。保证fn不会重复执行多次。
使用on()可以一次定义多个事件监听器。
Ext.util.Observable可以为某个事件设置拦截器,统一管理方法的触发。使用capture()和releaseCapture()来实现这个功能。
可以通过capture()中处理函数的返回值来决定是继续执行某个事件的监听函数,还是直接中止该事件的发生。
releaseCapture()一次性清除fireEvent()上所有的拦截函数。(不能准确清除某一个)
suspendEvents()暂停某个对象中所有事件的发生。再次调用resumeEvents()可以取消这个效果。
暂停(suspendEvents)和继续(resumeEvents)可以帮助我们统一管理某一对象的事件。
2.1.5 Ext.EventManager
Ext.EventManager定义了一系列事件相关的处理函数。常见的有onDocumentReady(即Ext.onReady())、onWindowResize和onTextResize。
Ext.onReady()保证在所有的HTML元素都加载完成后才执行。无论何时,都这样做,可以避免很多潜在问题。
onWindowResize()监听浏览器窗口的大小改变。Ext.EventManager.onWindowResize(function(width, height){//代码});
onTextResize()监听用户修改浏览器的文字大小。Ext.EventManager.onTextResize(function(oldSise, newSize){//代码});注意:onTextResize()需要操作<body>向其中添加测试用的元素。所有必须在Ext.onReady()中执行,否则会出错。
2.1.6 Ext.EventObject
Ext.EventObject将Ext自定义事件和浏览器事件结合在一起使用。还提供了辅助工具函数。
Ext.EventObject定义了一系列功能键,处理按键事件时不用背ASCII码,直接使用就行了:Ext.EventObject.SPACE代表空格键。
Ext.EventObject.browserEvent来得到原始的浏览器事件。还是建议使用Ext.EventObject。
Ext.EventObject与Ext.lib.Event中很多函数重名。Ext.EventObject代表浏览器事件,在内部使用Ext.lib.Event处理对应的browserEvent。
Ext.EventObject对Ext.lib.Event扩展的部分是对鼠标事件和按键事件的增强,可以判断Alt等功能键是否被按下。也可以使用hasModifier()判断是否有功能键被按下。一般与其他按键状态配合,用于判断组合按键的情况。
Ext.EventObject.getWheelDelta(),获得鼠标滚轮的delta值。
2.2 Ext的核心组件
2.2.1 Ext.Component
Ext.Component是Ext所有组件的基类,所有的子类都自动享有了标准Ext组件的生命周期,包括创建、渲染和销毁。自动支持标准的隐藏/显示以及启用/禁用等操作。
每个组件都有一个xtype属性,指定在某处使用的组件。
所有组件都允许在Ext.Container及其子类中进行延迟渲染(lazy render),也可以把组件注册到Ext.ComponentMgr中,这样就可以在任何地方使用Ext.getCmp()函数直接根据id获得对应的组件。
(Ext组件继承树的图有机会再贴。今天网络有问题。)
组件大致分三类:基本组件、工具条组件和表单组件。
(Ext组件图有机会再贴。今天网络有问题。)
通常会在进行布局时借助xtype实现简化配置和延迟加载。
2.2.2 Ext.BoxComponent
Ext.BoxComponent继承之Ext.Component,并实现了定位和控制自身大小的功能。
可以使用pageX、pageY、x、y为Ext.BoxComponent指定具体的坐标,也使用width和height为Ext.BoxComponent指定长度和宽度,或者autoHeight和autoWidth让Ext.BoxComponent根据本身的内容自动调整长度和高度。例如new Ext.BoxComponent(){pageX:100,pageY:50,……};
2.2.3 Ext.Container
Ext.Container继承之Ext.BoxComponent,提供了参数layout,指定当前组件使用的布局;items包含当前组件中的所有子组件。
(图有机会再贴。今天网络有问题。)
2.2.4 Ext.Panel
Ext.Panel直接继承自Ext.Container。无需继承即可直接使用。使用title定义标题;使用tbar和bbar设置上下位置的工具条;使用collapseFirst、collapsed、collapsedCls和collapsible设置与面板折叠相关的配置;还可以使用floating和shadow设置浮动阴影效果,以及使用HTML直接设置面板内容。例如:var panel =new Ext.Panel({title:'测试',……});panel.render();
2.2.5 Ext.TabPanel
var tabs = new Ext.TabPanel({renderTo:document.body, height:100});第一个参数指定渲染的元素,然后直接放到HTML的body部分。
tabs.add({id:Ext.id, title:'测试标题',html:'内容', closable:true});可以通过add()向TabPanel中添加两个标签。Ext.id生成唯一的id值;closable设置标签是否可以手工关闭。默认是false。
注:这里的html属性还可以使用autoLoad:{url:'html, scripts:ture}文件'来代替。后一个参数指明html文件中有JavaScript。
tabs.activate(0)激活标签,标签的索引从0开始。
更多内容,请见我的博客:“地瓜哥”,http://www.diguage.com/
相关推荐
深入浅出Ext JS.第二版完整版,带目录(辛苦整理了好久的,放心下)。文件太大分成了3个部分,请分别下载,否则解压不了。 深入浅出Ext JS.第二版目录完整版(1/3):http://download.csdn.net/source/3154879 深入浅...
深入浅出Ext JS.第二版完整版,带目录(辛苦整理了好久的,放心下)。文件太大分成了3个部分,请分别下载,否则解压不了。 深入浅出Ext JS.第二版目录完整版(1/3):http://download.csdn.net/source/3154879 深入浅...
《深入浅出Ext JS(第2版)》是一本详细解析Ext JS框架的权威书籍,其随书光盘包含了书中所有实例的源代码,这些代码对应于Ext JS的3.2.0版本。通过深入研究这些实例,读者可以更直观、更深入地理解Ext JS的强大功能和...
《深入浅出EXT JS 第二版》是一本专注于介绍Ext JS框架的书籍,旨在为读者提供一个实用的学习指南。Ext JS是一个功能丰富、模块化的JavaScript框架,专门用于开发交互式的Web应用。该书从基础知识到高级应用,循序渐...
《深入浅出Ext JS》是Ext JS领域内的经典著作,由浅入深、循序渐进地对Ext JS各方面的知识进行了全面而系统的阐述。全书由一个可以引领读者快速入门的“Hello World”示例开篇,紧接着对Ext JS的事件、核心组件、...
深入浅出Ext JS.第二版完整版,带目录(辛苦整理了好久的,放心下)。文件太大分成了3个部分,请分别下载,否则解压不了。 深入浅出Ext JS.第二版目录完整版(1/3):http://download.csdn.net/source/3154879 深入浅...
深入浅出Ext JS第2版.pdf深入浅出Ext JS第2版.pdf(3/4)
根据提供的信息,我们可以了解到这是一本关于Ext JS的书籍——《深入浅出Ext JS第2版》,虽然描述中提到了“其实这个不用下载”,但为了更好地理解和总结这本书的知识点,我们将基于标题、描述以及部分内容来探讨书...
深入浅出Ext JS第2版.pdf 深入浅出Ext JS第2版.pdf(1/4)
深入浅出Ext JS的代码 深入浅出Ext JS的代码实例
《深入浅出Ext JS》原书代码《深入浅出Ext JS》原书代码《深入浅出Ext JS》原书代码《深入浅出Ext JS》原书代码《深入浅出Ext JS》原书代码《深入浅出Ext JS》原书代码《深入浅出Ext JS》原书代码《深入浅出Ext JS》...
深入浅出Ext JS第2版.pdf深入浅出Ext JS第2版.pdf(4/4)
这是Ext Js的相关代码例子,按照章节分好类别,希望能给学习Ext Js的人快速学习,快速掌握提供帮助
深入浅出Ext JS(第2版) PDF 62.5M 分二部分 深入浅出Ext JS(第2版).haozip01.zip 深入浅出Ext JS(第2版).haozip02.zip 用好压分分卷压缩
《深入浅出Ext JS》共三卷 第二部分电子书 完整版 徐会生 何启伟 康爱媛 本书赞誉涵盖Ext JS 3.0新特性 Ext JS专家力作,实例丰富,完美结合理论和实践 Ajax中国、Dojo中国、Family168、开源人4大网站联袂推荐.
《深入浅出Ext JS》第二版的完整电子扫描文件,内中附带了书中的所有实例代码。方便大家查看。
本书共分为3个分卷,要全部下载才能解压缩 资料来源:大家论坛“http://club.topsage.com”