日期:2014-05-16  浏览次数:20303 次

深入浅出Ext JS(第二版)——学习笔记

第二章 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定义了一系列事件