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 相关文章推荐
一个可以随意添加多个序列的tag函数
Jul 21 Javascript
jquery对表单操作2
Apr 06 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
Feb 03 Javascript
提高jQuery性能的十个诀窍
Nov 14 Javascript
JS提交form表单实例分析
Dec 10 Javascript
JavaScript中获取时间的函数集
Aug 16 Javascript
基于AngularJS实现的工资计算器实例
Jun 16 Javascript
基于对象合并功能的实现示例
Oct 10 Javascript
如何去除vue项目中的#及其ie9兼容性
Jan 11 Javascript
JS尾递归的实现方法及代码优化技巧
Jan 19 Javascript
VUE使用axios调用后台API接口的方法
Aug 03 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
Nov 06 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
上海永华YH-R296(华普R-96)12波段立体声收音机的分析和打理
2021/03/02 无线电
php.ini中文版
2006/10/09 PHP
destoon二次开发入门示例
2014/06/20 PHP
php+mysqli使用面向对象方式查询数据库实例
2015/01/29 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
PHP中有关长整数的一些操作教程
2019/09/11 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
2007/04/20 Javascript
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
jQuery实战之仿淘宝商城左侧导航效果
2011/04/12 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
微信小程序 视图容器组件的详解及实例代码
2017/01/19 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
Vue 动态设置路由参数的案例分析
2018/04/24 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
js类的继承定义与用法分析
2019/06/21 Javascript
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
2014/08/22 Python
Python3.6简单反射操作示例
2018/06/14 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
基于python实现学生管理系统
2018/10/17 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
Structs界面控制层技术
2013/10/11 面试题
关爱女孩行动实施方案
2014/03/13 职场文书
建筑工地资料员岗位职责
2015/04/13 职场文书
2015小学教师德育工作总结
2015/05/12 职场文书
《圆的周长》教学反思
2016/02/17 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
PHP 技巧 * SVG 保存为图片(分享图生成)
2021/04/02 PHP
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
Python Django搭建文件下载服务器的实现
2021/05/10 Python
解决mysql模糊查询索引失效问题的几种方法
2021/06/18 MySQL
AudioContext 实现音频可视化(web技术分享)
2022/02/24 Javascript