读书人

extjs学习札记(二) Ext.Element类

发布时间: 2012-10-29 10:03:53 作者: rapoo

extjs学习笔记(二) Ext.Element类

上个系列中,我们用到了Ext.fly来获得一个Element对象,其实Ext.fly是Ext.Element.fly的简写形式。类似的方法还有一个Ext.get,是Ext.Element.get的简写。这两个方法都可以用使用Dom元素或者Dom元素的id作为参数来获得一个Element对象。区别在于fly返回的是Element轻量级的,占用较少的内存,但是不保存对象的引用,每次使用都会改变先前的对象,而get则会缓存每次返回的Element对象,但是占用较多的内存。我们通过一个例子来说明二者的区别,同时看看Element给我们提供的强大功能。在我们项目中添加一个html页面,内容如下:

///<reference?path="vswd-ext_2.0.2.js"?/>
?2extjs学习札记(二) Ext.Element类extjs学习札记(二) Ext.Element类/**//*
?3extjs学习札记(二) Ext.Element类*作者:大笨
?4extjs学习札记(二) Ext.Element类*日期:2009-10-12
?5extjs学习札记(二) Ext.Element类*版本:1.0
?6extjs学习札记(二) Ext.Element类*博客地址:http://yage.cnblogs.com
?7extjs学习札记(二) Ext.Element类*/
?8extjs学习札记(二) Ext.Element类
?9extjs学习札记(二) Ext.Element类extjs学习札记(二) Ext.Element类Ext.onReady(function()?extjs学习札记(二) Ext.Element类{
10extjs学习札记(二) Ext.Element类extjs学习札记(二) Ext.Element类????Ext.get("btn").on("click",?function()?extjs学习札记(二) Ext.Element类{
11extjs学习札记(二) Ext.Element类????????var?el1?=?Ext.get("div1");
12extjs学习札记(二) Ext.Element类????????var?el2?=?Ext.get("div2");
13extjs学习札记(二) Ext.Element类????????el1.addClass("red");??//增加CSS类
14extjs学习札记(二) Ext.Element类????????el2.addClass("green");
15extjs学习札记(二) Ext.Element类????????el1.setWidth();??//设置宽度
16extjs学习札记(二) Ext.Element类????????el1.highlight();??//高亮显示
17extjs学习札记(二) Ext.Element类????????el1.center();??//居中
18extjs学习札记(二) Ext.Element类????????el1.setOpacity(0.5);??//设置透明度
19extjs学习札记(二) Ext.Element类extjs学习札记(二) Ext.Element类????????el2.fadeIn(extjs学习札记(二) Ext.Element类{?endOpacity:?1,?//可以是0和1之间的任意值
20extjs学习札记(二) Ext.Element类????????????easing:?'easeOut',
21extjs学习札记(二) Ext.Element类????????????duration:?1
22extjs学习札记(二) Ext.Element类????????});
23extjs学习札记(二) Ext.Element类????????//el1.addClass("red").setWidth(100).setOpacity(0.5).center();
24extjs学习札记(二) Ext.Element类????});
25extjs学习札记(二) Ext.Element类});

??? 运行之后我们点击button按钮可以看到效果。代码都很直观,不需要过多的解释。现在我们把Element的get方法换成fly,运行之后我们会发现,所有的操作都在div2上进行,因为div1的Element引用并未被保存下来,第二次使用fly方法的时候改写了第一次获得的Element对象,所以我们看到操作都在div2上进行了。很多用过jquery的人喜欢用方法链(method chain)的方式写代码,由于Element对象的大多数方法返回的还是Element对象,所以这里也可以采用方法链,就像 我在23行中写的那样。但是要注意highlight,fadeIn,fadeOut这些方法事实上并不是Element对象的方法,它们其实是 Ext.Fx类中的方法,只是用了js的apply方法给加到Element对象上去了(apply方法的使用可以参考这里),Fx 泪中的方法使用了内部的效果队列,效果是按照特定的顺序的,而Element对象的方法则是立即执行的。所以在方法链中同时使用Element和Fx的方 法时需要注意,有可能会产生不希望看的结果。
??? 我们的代码中用到了setWith方法,在Element类还有一些以set开头的方法,用来进行一些设置,这些方大多 数有一个可选的参数用来呈现动画的效果,这个参数可以是布尔值,可以用来开启默认的设置,也可以是一个json对象,用来对动画进行详细的定制,我们把上 边的代码改一下,来看看带动画的效果:?

///<reference?path="vswd-ext_2.0.2.js"?/>
?2extjs学习札记(二) Ext.Element类extjs学习札记(二) Ext.Element类/**//*
?3extjs学习札记(二) Ext.Element类*作者:大笨
?4extjs学习札记(二) Ext.Element类*日期:2009-10-12
?5extjs学习札记(二) Ext.Element类*版本:1.0
?6extjs学习札记(二) Ext.Element类*博客地址:http://yage.cnblogs.com
?7extjs学习札记(二) Ext.Element类*/
?8extjs学习札记(二) Ext.Element类extjs学习札记(二) Ext.Element类Ext.onReady(function()?extjs学习札记(二) Ext.Element类{
?9extjs学习札记(二) Ext.Element类extjs学习札记(二) Ext.Element类????Ext.get("btn").on("click",?function()?extjs学习札记(二) Ext.Element类{?????
10extjs学习札记(二) Ext.Element类extjs学习札记(二) Ext.Element类????????Ext.fly("div1").addClass("red").setWidth(100,?extjs学习札记(二) Ext.Element类{
11extjs学习札记(二) Ext.Element类????????????duration:?3,
12extjs学习札记(二) Ext.Element类????????????easing:?'elasticIn',
13extjs学习札记(二) Ext.Element类extjs学习札记(二) Ext.Element类????????????callback:?function()?extjs学习札记(二) Ext.Element类{Ext.Msg.alert("信息","div1的宽度被设置为100")?},
14extjs学习札记(二) Ext.Element类????????????scope:?this
15extjs学习札记(二) Ext.Element类????????});
16extjs学习札记(二) Ext.Element类????});
17extjs学习札记(二) Ext.Element类});

? ? 简单解释下上边的代码:duration指明动画的时间,这里是3秒;easing用来设定动画的方式,必须是有效的 Ext.lib.Easing的值,可以从帮助文档中获得全部的有效值;callback,当动画执行完毕的时候调用的函数,scope指明callback函数的作用域。
??? 除了使用get和fly方法,Element还有一个select方法,这可是一个很强大的方法,可以根据选择器来获取一个Element的数组(其实返回的是一个CompositeElementLite或者CompositeElement对象,这两个类是js中的继承关系,在内部维护了一个Element对象的数组。当我们在返回的对象上使用Element的方法,实际上是对数组中的每一个Element对象调用方法)。这个方法可以简写为Ext.select,有一个选择器作为参数,使用方法和jquery类似,比如说Ext.select("p")会选择所有的p标签,Ext.select(".red")会选择css类为red的所有标签,选择器可以组合来使用,比如"div.foo:nth-child(odd)[@foo=bar].bar:first"。善于使用选择器可以给我们控制元素带来非常大的方便,可以参阅Ext.DomQuery类的文档来获得更多选择器的相关知识。
??? Element的query方法使用和select相似的方法来返回Dom节点的集合,不过需要注意的是Ext.query并不是Ext.Element.query的简写,而是Ext.DomQuery.select方法的简写。Dom接点可以通过get方法获得Element对象,而Element对象可以通过dom属性来获得Dom节点,根据不同的需要,我们可以很方便的进行转换。
??? 最后说一下Element的addListener方法,该方法可以简写为on,用来给Element对象注册事件,我们已经看到过on("click",function(){})这样的用法了。通过这个方法还可以一次注册多个事件,例如:

extjs学习札记(二) Ext.Element类el.on(extjs学习札记(二) Ext.Element类{
?2extjs学习札记(二) Ext.Element类extjs学习札记(二) Ext.Element类????'click'?:?extjs学习札记(二) Ext.Element类{
?3extjs学习札记(二) Ext.Element类????????fn:?this.onClick,
?4extjs学习札记(二) Ext.Element类????????scope:?this,
?5extjs学习札记(二) Ext.Element类????????delay:?100
?6extjs学习札记(二) Ext.Element类????},
?7extjs学习札记(二) Ext.Element类extjs学习札记(二) Ext.Element类????'mouseover'?:?extjs学习札记(二) Ext.Element类{
?8extjs学习札记(二) Ext.Element类????????fn:?this.onMouseOver,
?9extjs学习札记(二) Ext.Element类????????scope:?this
10extjs学习札记(二) Ext.Element类????},
11extjs学习札记(二) Ext.Element类extjs学习札记(二) Ext.Element类????'mouseout'?:?extjs学习札记(二) Ext.Element类{
12extjs学习札记(二) Ext.Element类????????fn:?this.onMouseOut,
13extjs学习札记(二) Ext.Element类????????scope:?this
14extjs学习札记(二) Ext.Element类????}
15extjs学习札记(二) Ext.Element类});
16extjs学习札记(二) Ext.Element类

??? delay指出在事件触发多长时间以后执行事件处理函数,单位是毫秒。还有一种简洁的写法:

extjs学习札记(二) Ext.Element类el.on(extjs学习札记(二) Ext.Element类{
2extjs学习札记(二) Ext.Element类????'click'?:?this.onClick,
3extjs学习札记(二) Ext.Element类????'mouseover'?:?this.onMouseOver,
4extjs学习札记(二) Ext.Element类????'mouseout'?:?this.onMouseOut,
5extjs学习札记(二) Ext.Element类????scope:?this
6extjs学习札记(二) Ext.Element类});

读书人网 >JavaScript

热点推荐