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 14 Javascript
js实现数字每三位加逗号的方法
Feb 05 Javascript
Highcharts入门之简介
Aug 02 Javascript
原生js实现轮播图的示例代码
Feb 20 Javascript
react native与webview通信的示例代码
Sep 25 Javascript
Angular弹出模态框的两种方式
Oct 19 Javascript
jquery 实现拖动文件上传加载进度条功能
Mar 18 jQuery
微信小程序的部署方法步骤
Sep 04 Javascript
angularJS实现不同视图同步刷新详解
Oct 09 Javascript
移动端H5页面返回并刷新页面(BFcache)的方法
Nov 06 Javascript
vue element自定义表单验证请求后端接口验证
Dec 11 Javascript
JS eval代码快速解密实例解析
Apr 23 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
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
php文件操作之小型留言本实例
2015/06/20 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
javascript 常用关键字列表集合
2007/12/04 Javascript
基于jQuery的input输入框下拉提示层(自动邮箱后缀名)
2012/06/14 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
浅谈js原生拖放
2016/11/21 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
详解vue 中 scoped 样式作用域的规则
2020/09/14 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
详解Python中with语句的用法
2015/04/15 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
如何在Django中设置定时任务的方法示例
2019/01/18 Python
Python测试模块doctest使用解析
2019/08/10 Python
python适合做数据挖掘吗
2020/06/16 Python
Python3如何使用range函数替代xrange函数
2020/10/05 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
django使用多个数据库的方法实例
2021/03/04 Python
html5 button autofocus 属性介绍及应用
2013/01/04 HTML / CSS
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
.TTL是什么?有什么用处,通常那些工具会用到它?(ping? traceroute? ifconfig? netstat?)
2016/05/09 面试题
毕业生的求职信范文分享
2013/12/04 职场文书
生日宴会答谢词
2014/01/09 职场文书
ktv好的活动方案
2014/08/15 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
工艺技术员岗位职责
2015/02/04 职场文书
遗失证明范文
2015/06/19 职场文书
会议主持词结束语
2015/07/03 职场文书
大学学习委员竞选稿
2015/11/20 职场文书
2016圣诞节贺卡寄语
2015/12/07 职场文书
Java实现扫雷游戏详细代码讲解
2022/05/25 Java/Android
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers