ExtJS自定义事件

ExtJS自定义事件类为Ext.util.Observable

  • 最简单的自定义事件
Ext.onReady(function(){
 	var win = Ext.create('Ext.window.Window',{
 		title:'简单的自定义事件',
 		width:400,
 		height:300,
 		renderTo:Ext.getBody(),
 		listeners: {
 			show:function(){
 				// t3:触发自定义事件的时机
 				win.fireEvent('myEvent');
 			}
 		}
 	});
 	
 	// t1: 为组件添加事件类型
 	win.addEvents('myEvent');
 	// t2:为组件添加事件监听
 	win.on('myEvent', function(){
 		alert('myEvent...');
 	});
 
 	win.show();
});
  • 为自定义的类添加事件类型
Ext.onReady({
 	Ext.define('Employee', {
 		mixins: {
 			observable: 'Ext.util.Observable'
 		},
 		
 		constructor: function(config){
 			this.mixins.observable.constructor.call(this, config);
 			
 			this.addEvents('fired', 'quit');
 		}
 		
 	});
 	
 	//	实例化
 	var emp = new Employee({
 		listeners:{
 			quit:function(){
 				alert('quit!');
 			}
 		}
 	});
 	
 	emp.fireEvent('quit');

});
  • 事件的转发机制
Ext.onReady({
	var win = Ext.create('Ext.Window', {
		title:'事件的转发机制',
		width:300,
		height:200,
		renderTo:Ext.getBody(),
		listeners:{
			myEvent:function(){
				alert('customize event...');
			}
		}
	});
	
	var btn = Ext.create('Ext.button.Button', {
		text:'按钮',
		renderTo:Ext.getBody(),
		handler:function(){
			btn.fireEvent('myEvent');
		}
	});

	win.show();
	//	事件的转发机制: 
	win.relayEvents(btn, ['myEvent']);
/**
relayEvents(origin, events, prefix)

Relays selected events from the specified Observable as if the events 
 were fired by `this`. For example if you are extending Grid, you might 
 decide to forward some events from store. So you can do this inside 
 your initComponent: this.relayEvents(this.getStore(), ['load']); The grid 
 instance will then have an observable 'load' event which will be passed 
 the parameters of the store's load event and any function fired with the 
 grid's load event would have access to the grid using the `this` keyword. 
Parameters:
	{Object} origin The Observable whose events this object is to 
	 relay.
	{String[]} events Array of event names to relay.
	{String} [prefix] A common prefix to prepend to the event 
	 names. For example: this.relayEvents(this.getStore(), ['load', 'clear'], 
	 'store'); Now the grid will forward 'load' and 'clear' events of store as 
	 'storeload' and 'storeclear'.
*/
});
  • single配置项的使用:单次运行监听器
Ext.onReady({
 	var win = Ext.create('Ext.Window',{
 		title:'单次执行监听器的使用',
 		width:300,
 		height:200,
 		renderTo:Ext.getBody(),
 		listeners:{
 			render:function(){
 				alert('把组件渲染到body,只执行一次');
 			},
 			single:true, // 当前的事件监听只执行一次,执行完成之后就自动销毁了
 			delay:3000 //	延迟执行事件监听
 		}
 	});
 	
 	win.show();
});
  • 事件的挂起和恢复
Ext.onReady({
 	var btn1 = Ext.create('Ext.button.Button', {
 		text:'挂起',
 		renderTo:Ext.getBody(),
 		handler:function(){
 			btn3.suspendEvents();//挂起btn3组件的事件
 		}
 	});
 	
 	var btn2 = Ext.create('Ext.button.Button', {
 		text:'恢复',
 		renderTo:Ext.getBody(),
 		handler:function(){
 			btn3.resumeEvents();//恢复btn3组件的事件
 		}
 	});
 	
 	var btn3 = Ext.create('Ext.button.Button', {
 		text:'按钮',
 		renderTo:Ext.getBody(),
 		listeners:{
 			'mouseover': function(){
 				alert('execute...');
 			}
 		}
 	});
});

说明:
Ext的事件主要做了三个重要工作:
1、屏蔽了浏览器的差异; 2、原生事件和自定义事件可以并行的自由使用;3、强大的扩展性。
可以说,Ext是运行在Observable这个类之上的,Ext中大部分的类都需要混入Ext.util.Observable,从而提供对事件的支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值