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实现给出的盒子的序列是否可连为一矩型
Aug 30 Javascript
利用JQuery为搜索栏增加tag提示
Jun 22 Javascript
jQuery学习笔记[1] jQuery中的DOM操作
Dec 03 Javascript
jQuery的text()方法用法分析
Dec 20 Javascript
深入理解JavaScript中的浮点数
May 18 Javascript
jQuery手风琴的简单制作
May 12 jQuery
JavaScript hasOwnProperty() 函数实例详解
Aug 04 Javascript
vue项目tween方法实现返回顶部的示例代码
Mar 02 Javascript
vue实现点击选中,其他的不选中方法
Sep 05 Javascript
angular6的响应式表单的实现
Oct 10 Javascript
Ajax请求时无法重定向的问题解决代码详解
Jun 21 Javascript
基于JavaScript实现猜数字游戏代码实例
Jul 30 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统计字符串中中英文字符的个数
2013/06/23 PHP
php中替换字符串中的空格为逗号','的方法
2014/06/09 PHP
Laravel中注册Facades的步骤详解
2016/03/16 PHP
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
jQuery实现Tab菜单滚动切换的方法
2015/09/21 Javascript
JS实现网页右侧带动画效果的伸缩窗口代码
2015/10/29 Javascript
关于在mongoose中填充外键的方法详解
2017/08/14 Javascript
详解基于webpack2.x的vue2.x的多页面站点
2017/08/21 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
react中实现搜索结果中关键词高亮显示
2018/07/31 Javascript
JS实现的字符串数组去重功能小结
2019/06/17 Javascript
vue基于better-scroll仿京东分类列表
2020/06/30 Javascript
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
[40:55]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#4Newbee VS Fnatic
2016/03/03 DOTA
解决pandas无法在pycharm中使用plot()方法显示图像的问题
2018/05/24 Python
Python实现的爬虫刷回复功能示例
2018/06/07 Python
python实现微信小程序自动回复
2018/09/10 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
树莓派动作捕捉抓拍存储图像脚本
2019/06/22 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
Django 返回json数据的实现示例
2020/03/05 Python
阻止移动设备(手机、pad)浏览器双击放大网页的方法
2014/06/03 HTML / CSS
大学生护理专业自荐信
2013/10/03 职场文书
高中语文教学反思
2014/01/16 职场文书
书法比赛获奖感言
2014/02/10 职场文书
自愿离婚协议书范本
2014/09/13 职场文书
师德先进个人材料
2014/12/20 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
MySQL学习之基础命令实操总结
2022/03/19 MySQL
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技