06extjs的事件机制

day06
事件机制
1.事件的3种绑定方式
	HTML/DHTML
	DOM
	EXTJS
2.Ext.util.Observable 事件的基类
	为所有支持事件机制的extjs组件提供事件的支持
	创建的组件需要有事件的支持的话需要继承它
	事件的分类:
		a.标准事件[键盘按钮按下,鼠标的单击双击,滑过拖动]
		b.业务事件[当面板收起的时候触发,当组件被销毁的时候触发,当每一个对象的属性值不为空的时候触发]
	一个自定义事件的例子
	1>没有用到事件处理的场景
	母亲问孩子饿不饿--》
					《--孩子
					饿了--给一瓶牛奶
					不饿--不给
	2>用了事件的场景
	母亲给孩子一瓶牛奶--》
					孩子拿到牛奶饿了就喝
					不饿就不喝
	角色功能分析:
			孩子--应该有自己能拿到牛奶判断喝不喝的方法,当母亲给他牛奶的时候调用这个方法
			那么孩子就要有一个业务事件时刻监听这母亲什么时候给自己牛奶
			母亲:调用孩子拿牛奶的方法,并且传入一瓶牛奶
3.addManagedListener 受管制的监听
	由调用的组件管理,当组件执行了销毁命令的时候所以被组件管制的事件全部销毁
4.relayEvents 事件的分发和传播
(控制实现事件在不同控件或对象内的传播)
	如孩子喝了牛奶,父亲带他去医院
5.事件对象Ext.EventObject
	不是一个单例,不能被直接new出来,会存活在事件处理的函数中
6.事件管理器Ext.EventManager
	可以更方便的为页面元素绑定事件处理函数
	方法:addListener 为元素增减事件



1.HTML/DHTML
<script>
	function hello(){
		alert("hello");
	}
</script>
<body>
	<input type="button" id="btn1" onClick="hello()"/>
</body>

2.DOM
eventBinding.js
(function(){
	Ext.onReady(function(){
		if(Ext.isIE){
			document.getElementById("btn1").attachEvent("onclick",function(){//仅支持IE
				alert("DOM绑定事件");
			});
		}else{
			document.getElementById("btn1").addEventListener("click",function(){//仅支持FF
				alert("DOM绑定事件");
			});
		}				
	});
})();

3.EXTJS
Ext.get("btn1").on("click",function(){
	alert("extjs绑定事件");
});//可跨浏览器


4.自定义事件监听
customEvent.js
(function(){
	Ext.onReady(function(){
		Ext.define("children",{
			extend:'Ext.util.Observable',
			constructor:function(){
				this.state = "hungry",//目前所属的状态
				this.setMilk = function(milk){
					this.fireEvent('hungry',milk);//调用事件
				},
				this.addEvent({'hungry':true}),//声明事件,或事件初始化
				this.addListener("hungry",function(milk){//注册事件,添加监听
					if(this.state == 'hungry'){
						this.drink(milk);
					}else{
						alert("我不饿");
					}
				}),
				this.drink = function(milk){
					alert("喝了牛奶");
				}
			}
		});
		var children = Ext.create("children",{});
		Ext.util.Observable.capture(children,function(eventName){
			if(eventName == "hungry"){
				alert("牛奶过敏");
				return false;
			}else{
				return true;
			}
		});//事件拦截方法,静态可以这么调用
		
		//母亲调用孩子的接收牛奶的方法
		children.setMilk("milk");
	});
	/**为对象添加一个事件addEvents
	-->事件的监听方式注册这个事件addListener
	-->触发了这个事件的动作fireEvent*/
})();


5.addManagedListener
//简单工具条实例
(function(){
	Ext.onReady(function(){
		var tbar = Ext.create('Ext.toolbar.Toolbar',{
			renderTo:Ext.getBody(),//把工具条渲染到body组件上
			width:500,
			items:[
				{xtype:'button',id:'create',text:'create'/**,handler:function(){
					alert('创建');
				}*/},
				{xtype:'button',id:'delete',text:'delete'/**,handler:function(){
					alert('删除');
				}*/},
				{xtype:'button',id:'destroy',text:'destroy',handler:function(){
					var c = Ext.getCmp('delete');
					if(c){
						c.destroy();
					}
				}}
			]
		});

		var deleteB = Ext.getCmp('delete');
		deleteB.addManagedListener(Ext.getCmp("create"),'click',function(){//delete组件管理create组件的click事件
			alert('添加操作');
		});
		//有别于Ext.getCmp('create').on('click',function(){});
	});
})();


6.relayEvents
//父亲类不声明任何监听事件
Ext.define('father',{
	extend:'Ext.util.Observable',
	constructor:function(config){
		this.listeners = config.listeners;
		this.superclass.constructor.call(this,config);
	}
});
var father = Ext.create('father',{});
father.relayEvents(children,['hungry']);//children结束完hungry事件操作后,事件流入到father
father.on('hungry',function(){
	alert('去医院');
});


7.Ext.EventObject
Ext.onReady(function(){
	var b = Ext.get('btn4');
	b.on('click',function(e){
		alert(e.getPageX());//鼠标具体位置
	});
});


8.Ext.EventManager
Ext.onReady(function(){
	Ext.EventManager.addListener('btn5','click',function(){
		alert('通过事件管理器进行事件的监听');
	});
});

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值