大多数的JavaScript操作都需要先获取页面上的某个元素的引用(reference),好让你来做些实质性的事情。传统的JavaScript做法,是通过ID获取Dom节点的:
varmyDiv=document.getElementById('myDiv');这毫无问题,不过这样单单返回一个对象(DOM节点),用起来并不是太实用和方便。为了要用那节点干点事情,你还将要手工编写不少的代码;另外,对于不同类型浏览器之间的差异,要处理起来可真头大了。
由ID获取一个ExtElement的相应代码如下(首页ExtStart.htm包含一个ID为“myDiv”的div,然后,在ExtStart.js中加入下列语句):ThecorrespondingcodetogetanExtElementbyIDlookslikethis(thestarterpageExtStart.htmlcontainsadivwiththeid"myDiv,"sogoaheadandaddthiscodetoExtStart.js):
Ext.onReady(function(){varmyDiv=Ext.get('myDiv');});再回头看看Element对象,发现什么有趣的东东呢?
继续在ExtStart.js中,在刚才我们获取好myDiv的位置中加入:
myDiv.highlight();//黄色高亮显示然后渐退myDiv.addClass('red');//添加自定义CSS类(在ExtStart.css定义)myDiv.center();//在视图中将元素居中myDiv.setOpacity(.25);//使元素半透明获取多个DOM的节点通常情况下,想获取多个DOM的节点,难以依靠ID的方式来获取。有可能因为没设置ID,或者你不知道ID,又或者直接用ID方式引用有太多元素了。这种情况下,你就会不用ID来作为获取元素的依据,可能会用属性(attribute)或CSSClassname代替。基于以上的原因,Ext引入了一个异常强大的DomSelector库,叫做DomQuery。
到这范例为止,我们所写的代码都是放在onReady中,即当页面加载后总会立即执行,功能较单一——这样的话,你便知道,如何响应某个动作或事件来执行你希望做的事情,做法是,先分配一个function,再定义一个eventhandler事件处理器来响应。我们由这个简单的范例开始,打开ExtStart.js,编辑下列的代码:
Ext.onReady(function(){Ext.get('myButton').on('click',function(){alert("你单击了按钮");});});代码依然会加载好页面后执行,不过重要的区别是,包含alert()的function是已定义好的,但它不会立即地被执行,是分配到按钮的单击事件中。用浅显的文字解释,就是:获取ID为'myDottom'元素的引用,监听任何发生这个元素上被单击的情况,并分配一个function,以准备任何单击元素的情况。
一般来说,Element.select也能做同样的事情,即作用在获取一组元素上。下一例中,演示了页面中的某一段落被单击后,便有弹出窗口:
Ext.onReady(function(){Ext.select('p').on('click',function(){alert("你单击了一段落;");});});这两个例子中,事件处理的function均是简单几句,没有函数的名称,这种类型函数称为“匿名函数(anonymousfunction)”,即是没有名的的函数。你也可以分配一个有名字的eventhandler,这对于代码的重用或多个事件很有用。下一例等效于上一例:
Ext.onReady(function(){varparagraphClicked=function(){alert("你单击了一段落;");}Ext.select('p').on('click',paragraphClicked);});到目前为止,我们已经知道如何执行某个动作。但当事件触发时,我们如何得知这个eventhandler执行时是作用在哪一个特定的元素上呢?要明确这一点非常简单,Element.on方法传入到evenhandler的function中(我们这里先讨论第一个参数,不过你应该浏览API文档以了解evenhandler更多的细节)。在我们之前的例子中,function是忽略这些参数的,到这里可有少许的改变,——我们在功能上提供了更深层次的控制。必须先说明的是,这实际上是Ext的事件对象(eventobject),一个跨浏览器和拥有更多控制的事件的对象。例如,可以用下列的语句,得到这个事件响应所在的DOM节点:
Ext.onReady(function(){varparagraphClicked=function(e){Ext.get(e.target).highlight();}Ext.select('p').on('click',paragraphClicked);});注意得到的e.target是DOM节点,所以我们首先将其转换成为EXT的Elemnet元素,然后执行欲完成的事件,这个例子中,我们看见段落是高亮显示的。