`
ttitfly
  • 浏览: 624002 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Extjs2.0---事件处理

阅读更多
Extjs里的事件处理,只有继承了Ext.util.Observable类才具有事件功能

1.先看一个简单点的例子
//Extjs里的事件处理,只有继承了Ext.util.Observable类才具有事件功能

Employee = function(){
	this.addEvents("test");//注册事件,该事件名字为:test
}

Ext.extend(Employee,Ext.util.Observable);

todo = function(){
	alert("event was fired");
}

var em = new Employee();
em.on("test",todo);//将方法绑定到事件test上
em.fireEvent("test");//触发事件test



2.
页面代码:
<input type="button" name="button1" id="button1" value="button1" />


js代码:
todo = function(){
	alert("event was fired");
}

//window.onload = function(){}等价于Ext.onReady(function(){});页面加载完后就执行该函数
Ext.onReady(function() {
		//返回的button1是Observable的子类,所以具有事件处理功能
		var button1 = Ext.get("button1");//返回的Element对象,不等价于document.getElementById("button1")
//		var button1 = Ext.getDom("button1");//返回的HTMLElement对象,等价于document.getElementById("button1");
		
		alert(button1.id);//button1
		
//		button1.addListener("click",todo);//addListener与on是一样
//		button1.addListener("mouseover",todo);
		
		
		//通过EventManager来实现
		Ext.EventManager.addListener(button1,"click",todo);
		Ext.EventManager.addListener(button1,"mouseover",todo);
		
	}
)



3.
todo = function(){
	alert(this.id);//此处的this由addListener的第3个参数决定
}


Ext.onReady(function() {
		//返回的button1是Observable的子类,所以具有事件处理功能
		var button1 = Ext.get("button1");
		
		//先打印出button1,再打印出ext-gen1,刚好与addListener添加的顺序相反
		button1.addListener("click",todo,this);//todo函数打印出:ext-gen1
		button1.addListener("click",todo,button1);//todo函数打印出:button1
	}
)


4.
todo = function(){
	alert(this.id);//此处的this由addListener的第3个参数决定
}
Ext.onReady(function(){
		var button1 = Ext.get("button1");
		//addListener的第4个参数是个配置选项,所以需要用{},有4个配置选项,delay(触发事件多久后执行指定的函数),scope(如果第3个参数设置了,此处可以省),single(事件触发一次后,就被移走,以后再触发该事件无效),buffer(缓存区,也就是多长时间内触发该事件大于1次都认为是1次)
		//delay和buffer同时使用时有错误,具体原因还不知道是为什么?
		button1.addListener("click",todo,button1,{delay:3000,single:false});//因为button1也属于Observable类的子类,所以查看文档时可以直接查看Observable中的addListener方法
	}
)


5.
//window.onload = function(){}等价于Ext.onReady(function(){});  页面加载完后就执行该函数
Ext.onReady(function(){
		alert("ok1");
		function AA(){
			alert("ok2");
		}
	}
)
//只会打印出ok1,ok2不会被打印出来。因为页面加载完后会去执行函数function(),但是function()函数里的函数(或叫类)AA则不会去执行的。


Ext.onReady(function(){
		alert("ok1");
		function AA(){
			alert("ok2");
		}
		new AA();
	}
)

//这样ok1和ok2都会被打印出来,因为new AA()去调用了



6.等价写法:
todo = function(){
	alert(this.id);//此处的this由addListener的第3个参数决定
}
Ext.onReady(function(){
		var button1 = Ext.get("button1");
		
		//第一种写法
//		button1.addListener("click",todo,button1);
//		button1.addListener("mouseover",todo,button1);
		
		//第二种写法
//		button1.on({click:todo,mouseover:todo,scope:button1});

		//第三种写法
		button1.on(
			{
				click:{scope:button1,delay:3000,fn:todo},
				mouseover:{scope:button1,delay:1000,fn:todo}
			}
		);
		
		
		
	}
)


7.
Ext.onReady(
	function(){
		alert("ok1");//ok1
		AA = function(){
			alert("ok2");//ok2		
		};
		//同时定义多个属性和方法
		AA.prototype = {
			aa:1,
			bb:2,
			a:function(){
				alert("aa");//因为没有调用,所以不会打印出来
			},
			b:function(){
				alert("bb");//因为没有调用,所以不会打印出来
			}
		}
		new AA();
		
	}
)


8.事件处理EventObject

Ext.onReady(function(){
	var win = new Ext.Window({
		title:'hello',
		html:'world',
		width:400,
		height:300
	});
	win.show();
	//查看Extjs的文档:Ext.Window中的Public Events部分查看到:move : ( Ext.Component this, Number x, Number y ) ,默认3个参数,所以才有得下面函数的c,x,y
	win.on("move",moving);
})

moving = function(c,x,y){
	alert(c.id);
	alert(x);
	alert(y);
}


另一个例子:


页面代码:
<a href="http://www.baidu.com" id="baidu">百度</a>

js代码:
//事件处理EventObject

todo = function(e){//EventObject,在这里可以理解为:EventObject是HTMLElement对象的click事件的默认参数
	alert(this.id);//baidu
	var htmlEl = e.getTarget();//返回值是HTMLElement,得到事件触发的目标,这里也就是指<A>连接标签
	alert(htmlEl.innerText);//打印出:"百度"  (HTMLElement有innerHTML和innnerText方法。 Element没有)
	e.stopEvent();//阻止事件继续发生,也就是<A>标签不会跳转到baidu页面了
	
	//获得实际传递参数值
	alert(arguments.length);//3
	alert(arguments[2].aa);//test
	alert(arguments[2]["aa"]);//test
	
}
Ext.onReady(
	function(){
		var  baidu = Ext.get("baidu");
		baidu.on("click",todo,baidu,{aa:'test'});
	}
)


分享到:
评论
2 楼 JavaFlasher 2009-01-06  

最后 :
EventObject,在这里可以理解为:EventObject是HTMLElement对象的click事件的默认参数


是不是应该:
EventObject,在这里可以理解为:EventObject是Element对象的click事件的默认参数


因为 你前面说

Ext.get("button1");//返回的Element对象
Ext.getDom("button1");//返回的HTMLElement对象

只是求证一下,没别的意思。

写得很好。我每个都执行了一遍 。受益很多。

1 楼 hanjs 2008-12-31  
不错,学习了

相关推荐

    ExtJs2.0学习系列

    ExtJS是一种基于JavaScript的开源富客户端框架,特别适用于构建企业级的Web应用程序。...文档《ExtJs2.0学习系列.doc》应包含了关于这些主题的详细教程和示例,是学习ExtJS 2.0不可或缺的参考资料。

    extJs2.0 中文手册

    在深入探讨ExtJs2.0的具体知识点之前,需要明确ExtJs2.0中文手册的主要内容涵盖了框架的安装、配置、组件使用方法、事件处理、数据管理以及高级应用开发等方面。 首先,ExtJs2.0中文手册应该会介绍如何安装和配置...

    Extjs2.0 智能提示

    在事件处理方面,ExtJS 2.0支持丰富的事件监听和触发机制。智能提示不仅会列出可绑定的事件,还会展示事件处理函数的参数和返回值信息,使得事件处理的编写更加高效和准确。 同时,ExtJS 2.0还提供了大量的组件和小...

    资料:包括extjs2.0源码

    8. **事件系统**:EXTJS 2.0拥有强大的事件驱动模型,组件间通过事件进行通信,使得代码结构清晰,易于维护。研究源码可以学习到如何有效地利用事件系统来设计应用程序。 9. **国际化支持**:EXTJS 2.0支持多语言,...

    ExtJS2.0.rar_extjs2.0

    10. **API文档**:"ExtJS2.0实用简明教程.chm"中详细介绍了2.0版本的API,包括各个组件、方法和事件,是学习和开发的重要参考资料。 在实际开发中,通过阅读并实践这本教程,你可以了解到如何初始化一个ExtJS应用,...

    ExtJS2.0及API文档和实用开发指南

    API(Application Programming Interface)文档详细列出了框架提供的各种类、方法、属性和事件,帮助开发者了解如何使用这些功能来创建自定义组件、管理用户交互、处理数据和响应系统事件。通过查阅API,开发者可以...

    extjs 2.0精编教程--民间版

    1. **ExtJS基本概念**:首先,你需要了解ExtJS的基本架构,包括其组件模型、事件处理机制以及如何通过MVC模式组织代码。这将帮助你理解如何在网页中创建和管理各种用户界面元素。 2. **组件库**:ExtJS 2.0提供了...

    ExtJS2.0中文API珍藏版(Include Adobe Air)

    这个"ExtJS2.0中文API珍藏版"提供了一套完整的文档,使开发者能够更方便地理解和使用ExtJS 2.0版本的功能。API(Application Programming Interface)是软件开发中的一个重要概念,它定义了开发者如何与库或框架进行...

    Ext2 核心 API 中文详解 ExtJS2.0实用简明教程 ExtJS2.0教程 ExtJS2.0实用简明教程(easyjf) ext中文API+ sample

    本教程主要聚焦于ExtJS 2.0版本的核心API,帮助开发者深入理解和运用这个框架。 **一、ExtJS基本概念** 1. **组件(Components)**: ExtJS的核心是其组件系统,包括按钮、表格、面板、窗口等,这些组件构建了整个...

    Extjs2.0中文文档

    1. **ExtjsOOP基础**:Ext.js在2.0版本中加强了对面向对象编程的支持,文档中会介绍如何定义JavaScript类,以及如何使用Extjs命名空间和类的继承。这里也会提到Extjs的OOP特性和配置选项的使用方法。 2. **消息框的...

    extjs2.0(包含17套主题皮肤)

    EXTJS 2.0 是一个历史悠久的JavaScript框架,由Sencha公司开发,它以其强大的组件化、可定制性和丰富的用户界面而闻名。这个版本包含了17套不同的主题皮肤,为开发者提供了更多的选择来满足不同项目的需求,使得应用...

    ExtJS 2.0实用教程

    EXTJS 2.0进一步优化了组件间的通信和协同,使得布局管理和事件处理更加便捷。 2. **布局管理**:EXTJS 2.0 提供了多种内置布局,如Fit布局、Border布局、Form布局等,可满足不同场景的需求。布局管理器会自动调整...

    Extjs2.0一些例子

    9. **事件处理**:ExtJS采用事件驱动的编程模式,允许组件之间通过事件进行通信。理解和使用事件监听器是理解ExtJS工作原理的关键。 10. **皮肤和主题**:ExtJS 2.0支持更换皮肤,可以通过修改CSS样式来改变应用的...

    EXTJS2.0中文教程 实用开发指南

    教程首先会引导你了解EXTJS2.0的基本概念,包括MVC架构、事件处理机制以及数据绑定。MVC模式是EXTJS的核心,它将应用程序分为Model(模型)、View(视图)和Controller(控制器)三个部分,便于管理和维护复杂的逻辑...

    深入浅出ExtJS随书源码--EXTJS2.0

    "深入浅出ExtJS随书源码--EXTJS2.0"是针对ExtJS 2.0版本的学习资源,通常与一本相关书籍配套,帮助读者通过实际代码加深对ExtJS的理解。 源码分析: 1. **组件系统**:ExtJS的核心是其组件模型,其中包括各种可...

    ExtJS2.0实用简明教程

    **ExtJS 2.0 实用简明教程** ExtJS 是一个开源的JavaScript库,专为构建富客户端Web应用程序而设计。2.0版本在当时是ExtJS的一个重要里程碑,引入了许多新特性、改进和优化,使其在企业级应用开发中更加受欢迎。本...

    ExtJS2.0实用简明教程(chm)文档

    "ExtJS2.0实用简明教程(chm)文档"可能是这个压缩包中的主要资源,它提供了一个深入学习ExtJS 2.0的指南。CHM文件是Microsoft的 Compiled HTML Help 格式,通常包含一系列组织良好的网页,便于用户查阅和学习。这个...

    ExtJS2.0教程.chm +Extjs2.2.1压缩包

    `ExtJS2.0教程.chm`:这是一个帮助文件,通常用于提供详细的教程和API参考,帮助开发者了解ExtJS 2.0的各种组件、布局、数据绑定以及事件处理等。在chm文件中,用户可以查找函数、类和方法的用法,学习如何创建用户...

    ExtJS2.0管理后台框架

    在"ExtJS2.0管理后台框架"中,开发者利用ExtJS的功能,构建了一个完整的后端管理系统的基础架构。这个框架可能包括了用户界面组件、数据管理、交互逻辑等多个关键部分。 首先,让我们深入了解ExtJS的核心特性。...

    ExtJs2.0电子教程

    在这款"ExtJs2.0电子教程"中,你将深入了解到ExtJS 2.0版本的核心特性和使用方法。作为首款中文教程,它为国内开发者提供了宝贵的资源,帮助他们快速上手并掌握这一强大的前端技术。 首先,ExtJS 2.0在组件化方面...

Global site tag (gtag.js) - Google Analytics