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 相关文章推荐
用javascript获得地址栏参数的两种方法
Nov 08 Javascript
EXT中xtype的含义分析
Jan 07 Javascript
关于JavaScript的with 语句的使用方法
May 09 Javascript
javascript中定义私有方法说明(private method)
Jan 27 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
Nov 13 Javascript
js 获取元素在页面上的偏移量的方法汇总
Apr 13 Javascript
jQuery添加options点击事件并传值实例代码
May 18 Javascript
Vue.js每天必学之构造器与生命周期
Sep 05 Javascript
javascript 中null和undefined区分和比较
Apr 19 Javascript
ComboBox(下拉列表框)通过url加载调用远程数据的方法
Aug 06 Javascript
详解vuejs2.0 select 动态绑定下拉框支持多选
Apr 25 Javascript
Vue两个版本的区别和使用方法(更深层次了解)
Feb 16 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
对squid中refresh_pattern的一些理解和建议
2009/04/17 PHP
PHP下判断网址是否有效的代码
2011/10/08 PHP
Zend Framework基本页面布局分析
2016/03/19 PHP
javascript之锁定表格栏位
2007/06/29 Javascript
JavaScript中去掉数组中的重复值的实现方法
2011/08/03 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
javascript中声明函数的方法及调用函数的返回值
2014/07/22 Javascript
javascript生成不重复的随机数
2015/07/17 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
jQuery事件详解
2017/02/23 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
让Vue也可以使用Redux的方法
2018/05/23 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
2018/08/25 Javascript
深入解析ES6中的promise
2018/11/08 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
Vue实现微信支付功能遇到的坑
2019/06/05 Javascript
webpack 最佳配置指北(推荐)
2020/01/07 Javascript
node+vue实现文件上传功能
2020/05/28 Javascript
原生js实现购物车
2020/09/23 Javascript
centos系统升级python 2.7.3
2014/07/03 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
Python 共享变量加锁、释放详解
2019/08/28 Python
python数据化运营的重要意义
2019/11/25 Python
python 使用tkinter+you-get实现视频下载器
2020/11/17 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
html5默认气泡修改的代码详解
2020/03/13 HTML / CSS
数据管理员的自我评价分享
2013/11/15 职场文书
测绘工程专业求职信
2014/07/15 职场文书
2015年社区服务活动总结
2015/03/25 职场文书
MySQL数据库压缩版本安装与配置详细教程
2021/05/21 MySQL
Pandas-DataFrame知识点汇总
2022/03/16 Python