大多数的JavaScript操做都须要先获取页面上的某个元素的引用(reference),好让你来作些实质性的事情。传统的JavaScript作法,是经过ID获取Dom节点的:javascript
var myDiv = document.getElementById('myDiv');
这毫无问题,不过这样单单返回一个对象(DOM节点),用起来并非太实用和方便。为了要用那节点干点事情,你还将要手工编写很多的代码;另外,对于不一样类型浏览器之间的差别,要处理起来可真头大了。php
进入Ext.element 对象。元素(element)的的确确是Ext的心脏地带,--不管是访问元素(elements)仍是完成一些其余动做,都要涉及它。Element的 API是整个Ext库的基础,若是你时间很少,只是想了解Ext中的一两个类的话,Element必定是首选!css
由ID获取一个Ext Element 的相应代码以下(首页ExtStart.htm 包含一个ID为“myDiv”的 div,而后,在ExtStart.js中加入下列语句): The corresponding code to get an Ext Element by ID looks like this (the starter page ExtStart.html contains a div with the id "myDiv," so go ahead and add this code to ExtStart.js):html
Ext.onReady(function() { var myDiv = Ext.get('myDiv');});
再回头看看Element对象,发现什么有趣的东东呢?java
这意味着你可用少许的代码来作各类各样的事情,这里仅仅是一个简单的例子(完整的列表在Element API 文档中)。web
继续在ExtStart.js中,在刚才咱们获取好myDiv的位置中加入:ajax
myDiv.highlight(); //黄色高亮显示而后渐退 myDiv.addClass('red'); // 添加自定义CSS类 (在ExtStart.css定义) myDiv.center(); //在视图中将元素居中 myDiv.setOpacity(.25); // 使元素半透明
一般状况下,想获取多个DOM的节点,难以依靠ID的方式来获取。有可能由于没设置ID,或者你不知道ID,又或者直接用ID方式引用有太多元素 了。这种状况下,你就会不用ID来做为获取元素的依据,可能会用属性(attribute)或CSS Classname代替。基于以上的缘由,Ext引入了一个异常强大的Dom Selector库,叫作DomQuery。数组
DomQuery可 做为单独的库使用,但经常使用于Ext,你能够在上下文环境中(Context)获取多个元素,而后经过Element接口调用。使人欣喜的 是,Element对象自己便有Element.selcect的方法来实现查询,即内部调用DomQuery选取元素。这个简单的例子 中,ExtStart.htm包含若干段落(<p>标签),没有一个是有ID的,而你想轻松地经过一次操做立刻获取每一段,全体执行它们的动 做,能够这样作:浏览器
// 每段高亮显示 Ext.select('p').highlight();
Element.select在这个例子中的方便性显露无疑。它返回一个复合元素,能经过元素接口(Element interface)访问每一个元素。这样作的好处是可不用循环和不分别访问每个元素。缓存
DomQuery的选取参数能够是一段较长的数组,其中包括W3C CSS3 Dom选取器、基本XPatch、HTML属性和更多,请参阅DomQuery API文档以了解这功能强大的库个中细节。
到这范例为止,咱们所写的代码都是放在onReady中,即当页面加载后总会当即执行,功能较单一——这样的话,你便知道,如何响应某个动做或事件 来执行你但愿作的事情,作法是,先分配一个function,再定义一个event handler事件处理器来响应。咱们由这个简单的范例开始,打开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均是简单几句,没有函数的名称,这种类型函数称为“匿名函数(anonymous function)”,便是没有名的的函数。你也能够分配一个有名字的event handler,这对于代码的重用或多个事件颇有用。下一例等效于上一例:
Ext.onReady(function() { var paragraphClicked = function() { alert("你单击了一段落;");} Ext.select('p').on('click', paragraphClicked);});
到目前为止,咱们已经知道如何执行某个动做。但当事件触发时,咱们如何得知这个event handler执行时是做用在哪个特定的元素上呢?要明确这一点很是简单,Element.on方法传入到even handler的function中(咱们这里先讨论第一个参数,不过你应该浏览API文档以了解even handler更多的细节)。在咱们以前的例子中,function是忽略这些参数的,到这里可有少量的改变,——咱们在功能上提供了更深层次的控制。必 须先说明的是,这其实是Ext的事件对象(event object),一个跨浏览器和拥有更多控制的事件的对象。例如,能够用下列的语句,获得这个事件响应所在的DOM节点:
Ext.onReady(function() { var paragraphClicked = function(e) { Ext.get(e.target).highlight();} Ext.select('p').on('click', paragraphClicked);});
注意获得的e.target是DOM节点,因此咱们首先将其转换成为EXT的Elemnet元素,而后执行欲完成的事件,这个例子中,咱们看见段落是高亮显示的。