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


Posted in Javascript onOctober 13, 2009

区别在于fly返回的是Element轻量级的,占用较少的内存,但是不保存对象的引用,每次使用都会改变先前的对象,而get则会缓存每次返回的Element对象,但是占用较多的内存。我们通过一个例子来说明二者的区别,同时看看Element给我们提供的强大功能。在我们项目中添加一个html页面,内容如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<head> 
<title>Element Demo</title> 
<link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css" /> 
<script type="text/javascript" src="extjs/ext-base-debug.js"></script> 
<script type="text/javascript" src="extjs/ext-all-debug.js"></script> 
<script type="text/javascript" src="extjs/ext-lang-zh_CN.js"></script> 
<script type="text/javascript" src="js/element.js"></script> 
</head> 
<body> 
<input type="button" value="请点击我" id="btn" /> 
<div id="div1"></div> 
<div id="div2"></div> 
</body> 
</html>

当然还要添加element.js文件,我们先用Ext.get方法来获取element对象并进行一些操作,代码如下:
///<reference path="vswd-ext_2.0.2.js" /> 
/**//* 
*作者:大笨 
*日期:2009-10-12 
*版本:1.0 
*/ Ext.onReady(function() { 
Ext.get("btn").on("click", function() { 
var el1 = Ext.get("div1"); 
var el2 = Ext.get("div2"); 
el1.addClass("red"); //增加CSS类 
el2.addClass("green"); 
el1.setWidth(); //设置宽度 
el1.highlight(); //高亮显示 
el1.center(); //居中 
el1.setOpacity(0.5); //设置透明度 
el2.fadeIn({ endOpacity: 1, //可以是0和1之间的任意值 
easing: 'easeOut', 
duration: 1 
}); 
//el1.addClass("red").setWidth(100).setOpacity(0.5).center(); 
}); 
});

运行之后我们点击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" /> 
/**//* 
*作者:大笨 
*日期:2009-10-12 
*版本:1.0 
*/ 
Ext.onReady(function() { 
Ext.get("btn").on("click", function() { 
Ext.fly("div1").addClass("red").setWidth(100, { 
duration: 3, 
easing: 'elasticIn', 
callback: function() {Ext.Msg.alert("信息","div1的宽度被设置为100") }, 
scope: this 
}); 
}); 
});

简单解释下上边的代码: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(){})这样的用法了。通过这个方法还可以一次注册多个事件,例如:
el.on({ 
'click' : { 
fn: this.onClick, 
scope: this, 
delay: 100 
}, 
'mouseover' : { 
fn: this.onMouseOver, 
scope: this 
}, 
'mouseout' : { 
fn: this.onMouseOut, 
scope: this 
} 
});

delay指出在事件触发多长时间以后执行事件处理函数,单位是毫秒。还有一种简洁的写法:
el.on({ 
'click' : this.onClick, 
'mouseover' : this.onMouseOver, 
'mouseout' : this.onMouseOut, 
scope: this 
});
Javascript 相关文章推荐
JavaScript高级程序设计 XML、Ajax 学习笔记
Sep 10 Javascript
javascript中的注释使用与注意事项小结
Sep 20 Javascript
js实现上传图片之上传前预览图片
Mar 25 Javascript
JS对HTML标签select的获取、添加、删除操作
Oct 17 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
Jun 05 Javascript
13 款最热门的 jQuery 图像 360 度旋转插件推荐
Dec 09 Javascript
js中Number数字数值运算后值不对的解决方法
Feb 28 Javascript
Bootstrap弹出框(Popover)被挤压的问题小结
Jul 11 Javascript
vue2组件之select2调用的示例代码
Oct 12 Javascript
JS实现的DOM插入节点操作示例
Apr 04 Javascript
微信jssdk踩坑之签名错误invalid signature
May 19 Javascript
基于js实现数组相邻元素上移下移
May 19 Javascript
extjs 学习笔记(一) 一些基础知识
Oct 13 #Javascript
JQuery 绑定事件时传递参数的实现方法
Oct 13 #Javascript
通用javascript脚本函数库 方便开发
Oct 13 #Javascript
jquery pagination插件实现无刷新分页代码
Oct 13 #Javascript
让iframe子窗体取父窗体地址栏参数(querystring)
Oct 13 #Javascript
百度留言本js 大家可以参考下
Oct 13 #Javascript
javascript hashtable实现代码
Oct 13 #Javascript
You might like
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
php 伪静态之IIS篇
2014/06/02 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
PHP文件缓存类实现代码
2015/10/26 PHP
PHP检测用户是否关闭浏览器的方法
2016/02/14 PHP
利用php抓取蜘蛛爬虫痕迹的示例代码
2016/09/30 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
PHP安装扩展mcrypt以及相关依赖项深入讲解
2021/03/04 PHP
通过Unicode转义序列来加密,按你说的可以算是混淆吧
2007/05/06 Javascript
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
Google Map Api和GOOGLE Search Api整合实现代码
2009/07/18 Javascript
JavaScript 格式字符串的应用
2010/03/29 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
简易js代码实现计算器操作
2013/04/15 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
浅谈页面装载js及性能分析方法
2014/12/09 Javascript
原生javaScript实现图片延时加载的方法
2014/12/22 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
JavaScript中如何判断一个值的类型
2017/09/15 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
Python的Django框架使用入门指引
2015/04/15 Python
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
python3+PyQt5实现拖放功能
2018/04/24 Python
Python中numpy模块常见用法demo实例小结
2019/03/16 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
2019/04/16 Python
python实现微信自动回复机器人功能
2019/07/11 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
培训演讲稿范文
2014/01/12 职场文书
小学数学教学反思
2014/02/02 职场文书
民间借贷协议书范本
2014/10/01 职场文书
2015年食品安全工作总结
2015/05/15 职场文书
go语言-在mac下brew升级golang
2021/04/25 Golang