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 相关文章推荐
js的写法基础分析
Jan 17 Javascript
jquery中的 $(&quot;#jb51&quot;)与document.getElementById(&quot;jb51&quot;) 的区别
Jul 26 Javascript
jquery淡化版banner异步图片文字效果切换图片特效
Apr 08 Javascript
jQuery在ul中显示某个li索引号的方法
Mar 17 Javascript
javascript中mouseover、mouseout使用详解
Jul 19 Javascript
jQuery多条件筛选如何实现
Nov 04 Javascript
jQuery实现获取隐藏div高度的方法示例
Feb 09 Javascript
浅谈如何使用 webpack 优化资源
Oct 20 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
Dec 20 Javascript
微信小程序云开发实现增删改查功能
May 17 Javascript
vue-cli3单页构建大型项目方案
Apr 07 Javascript
element-ui 弹窗组件封装的步骤
Jan 22 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
在PHP模板引擎smarty生成随机数的方法和math函数详解
2014/04/24 PHP
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
php+ajax简单实现全选删除的方法
2016/12/06 PHP
php中namespace及use用法分析
2016/12/06 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
解决laravel上传图片之后,目录有图片,但是访问不到(404)的问题
2019/10/14 PHP
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
javascript继承的六大模式小结
2015/04/13 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
Javascript闭包实例详解
2015/11/29 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
JS实现的计数排序与基数排序算法示例
2017/12/04 Javascript
浅谈es6 javascript的map数据结构
2017/12/14 Javascript
js实现无限瀑布流实例方法
2019/09/16 Javascript
Python中map和列表推导效率比较实例分析
2015/06/17 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
Python基础之函数基本用法与进阶详解
2020/01/02 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
关于HTML5的安全问题开发人员需要牢记的
2012/06/21 HTML / CSS
美国第一香水网站:Perfume.com
2017/01/23 全球购物
全球航班旅行搜索网站:Cheapflights
2017/05/19 全球购物
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
网络程序员自荐信
2014/01/25 职场文书
《富饶的西沙群岛》教学反思
2014/04/09 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
网络管理员岗位职责
2015/02/12 职场文书
学校隐患排查制度
2015/08/05 职场文书