ExtJs事件机制基本代码模型和流程解析


Posted in Javascript onOctober 24, 2010

代码实现的目的:为一个自定义的类的某个属性在使用它时候,触发某个事件。
该程序的效果:点击输入按钮,弹出一个脚本提示输入框让用户输入他的姓名,确定后,用户录入的姓名会显示在页面的姓名文本框中,并且页面标题变成和姓名一致,接着再弹出脚本提示输入框让用户输入性别,录入完毕并点击确定后,用户录入的性别将会显示在页面的性别文本框里。

<!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> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<link rel="stylesheet" type="text/css" href="ext-all.css" /> 
<title>事件</title> 
<script type="text/javascript" src="/adapter/ext/ext-base.js"> 
</script> 
<script type="text/javascript" src="/ext-all.js"> 
</script> 
<script type="text/javascript" src="Person.js"> 
</script> 
<script type="text/javascript"> 
var _person = null ; 
//按钮点击后触发 
button_click = function(){ 
_person.setName(prompt("请输入姓名:" , "")) ; 
_person.setSex(prompt("请输入性别:" , "")) ; 
} //页面加载完进行的处理 
Ext.onReady(function(){ 
//获取控件对象 
var txt_name = Ext.get("txt_name") ; 
var txt_sex = Ext.get("txt_sex") ; 
//新建一个Person对象 
_person = new Ext.dojochina.Person() ; 
//为对象实现事件处理方法 
//JS里进行激发,这里进行事件触发后的处理 
_person.on("namechange" , function(_person , _old , _new){ 
txt_name.dom.value = _new ; 
alert(_person.getName()); 
}) ; 
_person.on("sexchange" , function(_person , _old , _new){ 
txt_sex.dom.value = _new ; 
}) ; 
_person.on("namechange" , function(_person , _old , _new){ 
document.title = _new ; 
}) ; 
}) ; 
</script> 
</head> 
<body> 
姓名:<input type="text" id="txt_name" maxlength="10"/><br/> 
性别:<input type="text" id="txt_sex" maxlength="10"/><br/> 
<input type="button" value="输入" onclick="button_click()"/> 
</body> 
</html>

Ext.namespace("Ext.dojochina") ; //定义一个类 
Ext.dojochina.Person = function(){ 
//为类添加事件方法 
this.addEvents( 
"namechange", 
"sexchange" 
) ; 
} ; 
//Person类继承于 Observable 
Ext.extend(Ext.dojochina.Person , Ext.util.Observable , { 
name:"", 
sex:"", 
//属性 
setName:function(_name){ 
if(this.name != _name){ 
//为对象设置新的name 
this.name = _name ; 
//激发起名字为namechange的事件,后面是传的三个参数 
this.fireEvent("namechange" , this , this.name , _name) ; 

} 
}, 
setSex:function(_sex){ 
if(this.sex != _sex){ 
this.sex = _sex ; 
//同上 
this.fireEvent("sexchange" , this , this.sex , _sex) ; 
} 
}, 
getName:function(){ 
return this.name; 
} 
}) ;

由以上具有代表性的代码中可以总结出,一个类要想绑定event事件,最基本和常见的程序设计流程是这样的:

1、需要在声明对象时候使用如下方法进行声明要绑定的事件名称;

this.addEvents( 
"namechange", 
"sexchange"

2、将自定义的类继承于Ext.util.Observable,并且实现想要触发1中定义的事件名的属性(或者说是方法);

setName:function(_name){ 
if(this.name != _name){ 
//为对象设置新的name 
this.name = _name ; 
//激发起名字为namechange的事件,后面是传的三个参数 
this.fireEvent("namechange" , this , this.name , _name) ; 
} 
},

注意这里的:this.fireEvent("namechange" , this , this.name , _name) ; 是触发事件的最直观入口。当方法执行到这里时候,将会激发名字为namechange的事件。

3 实现事件触发后的处理逻辑。

_person.on("namechange" , function(_person , _old , _new){ 
txt_name.dom.value = _new ; 
alert(_person.getName()); 
}) ;

这里的on是Extjs内置方法,当触发了名字为namechange的事件时候,将会执行function函数,而这里的function的参数,则是由JS里的this.fireEvent("namechange" , this , this.name , _name) ; 后面三个参数传来的。
好,一个EXTJS最简单经典的事件触发机制程序代码设计流程就是这样的,而代码执行的流程,则是一个逆推的过程了。欢迎与广大EXTJS爱好者进行交流,我的QQ:1213145055。

本文章作者:王崇安,博客地址:http://www.cnblogs.com/wangchongan

Javascript 相关文章推荐
IE和Mozilla的兼容性汇总event
Aug 12 Javascript
地震发生中逃生十大法则
May 12 Javascript
CSS JavaScript 实现菜单功能 改进版
Dec 09 Javascript
Jquery Ajax学习实例 向页面发出请求,返回XML格式数据
Mar 14 Javascript
Javascript遍历Html Table示例(包括内容和属性值)
Jul 08 Javascript
JS实现弹性漂浮效果的广告代码
Sep 02 Javascript
微信支付如何实现内置浏览器的H5页面支付
Sep 25 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
Oct 24 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
Feb 15 Javascript
详解Jquery 遍历数组之$().each方法与$.each()方法介绍
Jan 09 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
Jul 10 Javascript
vue2.0实现的tab标签切换效果(内容可自定义)示例
Feb 11 Javascript
JQuery EasyUI 对话框的使用方法
Oct 24 #Javascript
javascript textContent与innerText的异同分析
Oct 22 #Javascript
js各种验证文本框输入格式(正则表达式)
Oct 22 #Javascript
JavaScript学习点滴 call、apply的区别
Oct 22 #Javascript
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 #Javascript
jQuery中add实现同时选择两个id对象
Oct 22 #Javascript
jquery下动态显示jqGrid以及jqGrid的属性设置容易出现问题的解决方法
Oct 22 #Javascript
You might like
php实现的RSS生成类实例
2015/04/23 PHP
基于thinkPHP框架实现留言板的方法
2016/10/17 PHP
如何判断图片地址是否失效
2007/02/02 Javascript
网页中实现浏览器的最大,最小化和关闭按钮
2007/03/12 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
JavaScript原型链示例分享
2014/01/26 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
2014/10/31 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
JavaScript实现更改网页背景与字体颜色的方法
2015/02/02 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
2018/03/05 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
vue 兄弟组件的信息传递的方法实例详解
2019/08/30 Javascript
vue遍历生成的输入框 绑定及修改值示例
2019/10/30 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
[37:02]OG vs INfamous 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
用python + openpyxl处理excel2007文档思路以及心得
2014/07/14 Python
python3抓取中文网页的方法
2015/07/28 Python
浅谈Python实现Apriori算法介绍
2017/12/20 Python
python迭代器常见用法实例分析
2019/11/22 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
django xadmin 管理器常用显示设置方式
2020/03/11 Python
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
在职党员进社区活动总结
2014/07/05 职场文书
2014年安全保卫工作总结
2014/11/13 职场文书
2014年园林绿化工作总结
2014/12/11 职场文书
2014公司年终工作总结
2014/12/19 职场文书
捐助感谢信
2015/01/22 职场文书
python基于tkinter制作下班倒计时工具
2021/04/28 Python
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
详解Java实现数据结构之并查集
2021/06/23 Java/Android