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常用代码段收集
Oct 28 Javascript
分享一个asp.net pager分页控件
Jan 04 Javascript
JS实现简单路由器功能的方法
May 27 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
Aug 18 Javascript
js判断手机号是否正确并返回的实现代码
Jan 17 Javascript
bootstrap 下拉多选框进行多选传值问题代码分析
Feb 14 Javascript
vue项目中的webpack-dev-sever配置方法
Dec 14 Javascript
Vue.set()实现数据动态响应的方法
Feb 07 Javascript
使用Javascript简单计算器
Nov 17 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
Mar 04 Javascript
微信小程序中使用 async/await的方法实例分析
May 06 Javascript
vue+elementUI实现简单日历功能
Sep 24 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
一个程序下载的管理程序(一)
2006/10/09 PHP
PHP的cURL库功能简介 抓取网页、POST数据及其他
2011/04/07 PHP
编写安全 PHP应用程序的七个习惯深入分析
2013/06/08 PHP
php命令行用法入门实例教程
2014/10/27 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
jQuery 版本的文本输入框检查器Input Check
2009/07/09 Javascript
浅谈JavaScript之事件绑定
2013/07/08 Javascript
jQuery分组选择器用法实例
2014/12/23 Javascript
jQuery中html()方法用法实例
2014/12/25 Javascript
jQuery实现自动滚动到页面顶端的方法
2015/05/22 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
详解webpack + react + react-router 如何实现懒加载
2017/11/20 Javascript
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
彻底搞懂Python字符编码
2018/01/23 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
Python3爬虫使用Fidder实现APP爬取示例
2018/11/27 Python
Python实现SQL注入检测插件实例代码
2019/02/02 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
Python实现图片批量加入水印代码实例
2019/11/30 Python
如何基于pythonnet调用halcon脚本
2020/01/20 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
HearthSong官网:儿童户外玩具、儿童益智玩具
2017/10/16 全球购物
描述一下JVM加载class文件的原理机制
2013/12/08 面试题
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
五十岁生日宴会答谢词
2014/01/15 职场文书
校园歌咏比赛主持词
2014/03/18 职场文书
酒店开业庆典策划方案
2014/05/28 职场文书
中文专业自荐书
2014/06/29 职场文书
小学中队活动总结
2015/05/11 职场文书
三八妇女节新闻稿
2015/07/17 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
职工宿舍管理制度
2015/08/05 职场文书
高中政治教学反思
2016/02/23 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
Python中常见的反爬机制及其破解方法总结
2021/06/10 Python