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 ajax提交表单数据的两种实现方法
Apr 29 Javascript
用js实现的模拟jquery的animate自定义动画(2.5K)
Jul 20 Javascript
jquery Mobile入门—外部链接切换示例代码
Jan 08 Javascript
canvas时钟效果
Feb 16 Javascript
jQuery实现Select下拉列表进行状态选择功能
Mar 30 jQuery
使用原生js写ajax实例(推荐)
May 31 Javascript
激动人心的 Angular HttpClient的源码解析
Jul 10 Javascript
详解RequireJs官方使用教程
Oct 31 Javascript
vue组件编写之todolist组件实例详解
Jan 22 Javascript
Vue 处理表单input单行文本框的实例代码
May 09 Javascript
关于微信小程序map组件z-index的层级问题分析
Jul 09 Javascript
vue实现列表垂直无缝滚动
Apr 08 Vue.js
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
session在PHP大型web应用中的使用
2011/06/25 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
2018/05/12 PHP
laravel框架数据库配置及操作数据库示例
2019/10/10 PHP
解密效果
2006/06/23 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
2014/06/05 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
JQuery实现鼠标移动图片显示描述层的方法
2015/06/25 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
AngularJS中比较两个数组是否相同
2016/08/24 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
jQuery 1.9版本以上的浏览器判断方法代码分享
2017/08/28 jQuery
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
浅析vue-router原理
2018/10/19 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
python中执行shell的两种方法总结
2017/01/10 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
详解Python 正则表达式模块
2018/11/05 Python
python 图像平移和旋转的实例
2019/01/10 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
python爬虫中url管理器去重操作实例
2020/11/30 Python
CSS3悬停效果案例应用
2012/11/21 HTML / CSS
丝芙兰美国官网:SEPHORA美国
2016/08/03 全球购物
请用Java实现列出某个目录下的所有文件
2013/09/23 面试题
数学系个人求职信范文
2014/01/30 职场文书
库房管理员岗位职责
2014/03/09 职场文书
有趣的广告词
2014/03/18 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
幽默导游词开场白
2015/05/29 职场文书
黄埔军校观后感
2015/06/10 职场文书
2016年教师反腐倡廉心得体会
2016/01/13 职场文书