熟练使用 ExtJs 事件机制

熟练使用Ext 事件机制

//HTML
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
    <link href="../../ExtJS4.2/resources/css/ext-all-neptune.css" rel="stylesheet">
    <script src="../../ExtJS4.2/ext-all-debug.js"></script>
    <script src="../../ExtJS4.2/locale/ext-lang-zh_CN.js"></script>
</head>
<body>
    <script src="2.JavaScript.js"></script>
    <button id="myBtn">按钮</button>
</body>
</html>



1.基础用法
	1.为底层元素注册监听器
		//使用Ext.EventManager 为 button 标签添加点击监听.
		/**
		 *	addListener( String/HTMLElement el, String eventName, Function handler, Object scope, Object options )
		 *	加入一个事件处理函数,方法on是其简写方式。 通常您将使用Ext.Element.addListener 直接调用此版本支持的元素上。
		 *	el : String/HTMLElement
		 *      要分配的html元素或者其id。
		 *  eventName : String
		 *      事件处理函数的名称。
		 *  handler : Function
		 *      事件处理函数
		 *  scope : Object
		 *      (可选) 事件处理函数执行时所在的作用域。(this 引用)。默认为当前元素。
		 *  options : Object
		 *      (可选) 包含句柄配置属性的一个对象。
		*/

		Ext.onReady(function() {
		    Ext.EventManager.on('myBtn','click',function(e) {
		        console.log('被点击了...');
		    });
		});

		Ext.onReady(function() {
		    Ext.EventManager.on('myBtn','click',function(e) {
		        console.log(this);
		    });
		});

		Ext.onReady(function() {
		    Ext.EventManager.on('myBtn','click',function(e) {
		        console.log(Ext.encode(this));
		    },({name:'Java',age:22}));
		});

	2.为Ext的UI组件注册监听事件
		Ext.onReady(function() {
		    var win = new Ext.Window({
		        title : '基本事件',
		        width : 400,
		        height : 300,
		        listeners : {
		            'show' : function() {
		                console.log('窗体显示');
		            },
		            'close' : function() {
		                console.log('窗体关闭');
		            }
		        }
		    });
		    win.show();
		});

	3.批量注册监听器
		Ext.onReady(function() {
		    var win = new Ext.Window({
		        title:'基本事件',
		        width:400,
		        height:300,
		    });
		    win.on({
		        'show':function() {
		            console.log('哈哈哈哈,窗体开启....');
		        },
		        'close':function() {
		            console.log('啊啊啊啊,窗体关闭....');
		        }
		    });
		    win.show();
		});

	4.指定this
		Ext.onReady(function() {
		    var win = new Ext.Window({
		        id:'myWin',
		        title:'高级事件',
		        width:400,
		        height:300,
		        listeners:{
		            'show':function() {
		                console.log(this.getId());
		            },
		            'close':function() {
		                console.log(this.getId());
		            }
		        }
		    });
		    win.show();
		    var winId = win.getId();
		    console.log('winId : '+winId);
		});
		/**
			这里需要注意,如果需要在show事件中获得win的引用,一些代码会写成这个样子...
			    function getId(){
			        var strId = Ext.getCmp('myWin');
			        //其他代码....
			    }
		    从运行角度来说,没有问题,但是很多地方这么写,会显得很罗嗦....
		    比较好的方法是,直接引用this就可以引用win这个对象.
			    function(){
			        console.log(win.getId());
			    }
		*/

		Ext.onReady(function() {
		    var btn = Ext.create('Ext.Button',{
		        text:'按钮名称',
		        readerTo:Ext.getBody()
		    });
		    var win = new Ext.Window({
		        id:'myWin',
		        title:'高级事件',
		        width:400,
		        height:300,
		        listeners:{
		            'show':function() {
		                console.log(this.text);
		            },
		            scope:btn   //作用域配置成其他对象
		        }
		    });
		    win.show();
		});


	5.单次运行的监听事件
		Ext.onReady(function() {
		    var win = new Ext.Window({
		        id:'myWin',
		        title:'高级事件',
		        width:400,
		        height:300,
		        listeners:{
		            'hide':function() {
		                console.log('隐藏');
		            },
		            scope:win,
		            single:true
		        }
		    });
		    win.show();

		    Ext.create('Ext.Button',{
		        text:'显示',
		        renderTo:Ext.getBody(),
		        handler:function() {
		            win.show();
		            console.log('哈哈哈');
		        }
		    });

		    Ext.create('Ext.Button',{
		        text:'隐藏',
		        renderTo:Ext.getBody(),
		        handler:function() {
		            win.hide();
		        }
		    });

		});


	6.挂起和恢复
		/**
			suspendEvents() 和 resumeEvents() 
			这两个工具函数很有用,比如在弹出一个模态的Window时,
			被遮罩在下面的那些组件不会再接收鼠标和键盘的事件.
		*/
		Ext.onReady(function() {
		    var btn1 = new Ext.Button({
		        text:'测试用的按钮',
		        renderTo:Ext.getBody(),
		        listeners:{
		            'mouseover':function() {
		                console.log('鼠标滑过...');
		            }
		        }
		    });
		    Ext.create('Ext.Button',{
		        text:'挂起',
		        renderTo:Ext.getBody(),
		        handler:function() {
		            btn1.suspendEvents();
		        }
		    });
		    Ext.create('Ext.Button',{
		        text:'恢复',
		        renderTo:Ext.getBody(),
		        handler:function() {
		            btn1.resumeEvents();
		        }
		    });
		});


	7.事件转发
		Ext.onReady(function() {
		    var btn = new Ext.Button({
		        text:'触发事件',
		        renderTo:Ext.getBody(),
		        handler:function() {
		            btn.fireEvent('myBtn');
		        }
		    });

		    var win = new Ext.Window({
		        id:'myWin',
		        title:'转发',
		        width:400,
		        height:300,
		        listeners:{
		            'myBtn':function() {
		                alert('Window 收到事件');
		            }
		        }
		    });
		    win.show();
		    win.relayEvents(btn,['myBtn']);
		});

	8.删除监听函数
		Ext.onReady(function() {
		    var btn = new Ext.Button({
		        text:'删除事件监听事件',
		        renderTo:Ext.getBody(),
		        handler:function() {
		            win.un('close',closeHandler);
		        }
		    });
		    var closeHandler = function() {
		        console.log(this.getId());
		    };
		    var win = new Ext.Window({
		        id:'myWin',
		        title:'高级事件',
		        width:400,
		        height:300,
		        listeners:{
		            'close':closeHandler
		        }
		    });
		    win.show();
		});

	9.自定义事件
		Ext.onReady(function() {
		    var win = new Ext.Window({
		        title:'基本事件',
		        width:400,
		        height:300,
		        listeners:{
		            'show':function() {
		                this.fireEvent('myEvt');
		            }
		        }
		    });
		    win.addEvents('myEvt');
		    win.on('myEvt',function() {
		        console.log('我自己定义的事件');
		    })
		    win.show();
		});

你可能感兴趣的:(熟练使用 ExtJs 事件机制)