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 相关文章推荐
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
Dec 26 Javascript
js模仿hover的具体实现代码
Dec 30 Javascript
把普通对象转换成json格式的对象的简单实例
Jul 04 Javascript
D3.js实现散点图和气泡图的方法详解
Sep 21 Javascript
微信小程序媒体组件详解(视频,音乐,图片)
Sep 19 Javascript
对Vue- 动态元素属性及v-bind和v-model的区别详解
Aug 27 Javascript
详解vue中的computed的this指向问题
Dec 05 Javascript
详解vue父子组件关于模态框状态的绑定方案
Jun 05 Javascript
ES6的异步终极解决方案分享
Jul 11 Javascript
Vue中常用rules校验规则(实例代码)
Nov 14 Javascript
JavaScript实现图片伪异步上传过程解析
Apr 10 Javascript
JavaScript 实现拖拽效果组件功能(兼容移动端)
Nov 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
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
推荐10个提供免费PHP脚本下载的网站
2014/12/31 PHP
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
JS鼠标滑过图片时切换图片实现思路
2013/09/12 Javascript
动态加载iframe时get请求传递中文参数乱码解决方法
2014/05/07 Javascript
JS替换字符串中字符即替换全部而不是第一个
2014/06/04 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
javascript实现根据身份证号读取相关信息
2014/12/17 Javascript
TypeError document.getElementById(...) is null错误原因
2015/05/18 Javascript
jQuery表单验证功能实例
2015/08/28 Javascript
Window.Open打开窗体和if嵌套代码
2016/04/15 Javascript
JavaScript对象数组排序实例方法浅析
2016/06/15 Javascript
vue+element实现批量删除功能的示例
2018/02/28 Javascript
使用Nuxt.js改造已有项目的方法
2018/08/07 Javascript
JavaScript Canvas实现验证码
2020/08/02 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
vue实现扫码功能
2020/01/17 Javascript
JS原型prototype和__proto__用法实例分析
2020/03/14 Javascript
让IDE识别webpack的别名alias的实现方法
2020/05/06 Javascript
基于better-scroll 实现歌词联动功能的代码
2020/05/07 Javascript
微信小程序实现简单的select下拉框
2020/11/23 Javascript
[01:00:06]加油DOTA_EP01_网络版
2014/08/09 DOTA
利用Python2下载单张图片与爬取网页图片实例代码
2017/12/25 Python
Python实现判断一个整数是否为回文数算法示例
2019/03/02 Python
Python实现的北京积分落户数据分析示例
2020/03/27 Python
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
西班牙在线药店:DosFarma
2020/03/28 全球购物
Yahoo-PHP面试题3
2012/01/14 面试题
建筑工程自我鉴定
2013/10/18 职场文书
会计主管岗位职责范文
2013/11/08 职场文书
一名老师的自我评价
2014/02/07 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
医院深入开展党的群众路线教育实践活动实施方案
2014/08/27 职场文书
给病人的慰问信
2015/03/23 职场文书
详解RedisTemplate下Redis分布式锁引发的系列问题
2021/04/27 Redis