当前位置: 首页 > 图文教程 > 网络编程 > Javascript > extjs 为某个事件设置拦截器

Javascript
动态生成js类的实现方法
漂亮的提示信息(带箭头)
实时编辑网页网页文字实时编辑,如同TEXTBOX一般
基于逻辑运算的简单权限系统(实现) JS 版
用 javascript 实现的点击复制代码
AutoSave/自动存储功能实现
JQuery 简便实现页面元素数据验证功能
5 cool javascript apps
jQuery使用手册之 事件处理
dojo 之基础篇
dojo 之基础篇(二)之从服务器读取数据
dojo 之基础篇(三)之向服务器发送数据
Ajax一统天下之Dojo整合篇
javascript对象的property和prototype是这样一种关系
this[] 指的是什么内容 讨论
用prototype实现的简单小巧的多级联动菜单
xml 与javascript结合的问题解决方法
tbody元素支持嵌套的注意方法
推荐dojo学习笔记
JavaScript判断两种格式的输入日期的正确性的代码

Javascript 中的 extjs 为某个事件设置拦截器


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-20   浏览: 255 ::
收藏到网摘: n/a

Ext.util.Observable有一个重要的功能,可以为某个事件设置拦截器,统一管理方法的处罚。使用capture()和releaseCapture()来实现这个功能。 我们先来自定义一个事件:
复制代码 代码如下:

person = function(name) {
this.name = name;
this.addEvents("walk");
}
Ext.extend(person, Ext.util.Observable, {
info: function(event) {
return this.name + 'is' + event + 'ing.';
}
});
var person = new person('张铭诺');
person.on('walk', function() {
Ext.Msg.alert('event', person.name + '在走啊走啊。');
});

然后我们再定义一个按钮用来触发这个walk事件:
复制代码 代码如下:

var btn = new Ext.Button({
id: 'walk',
text: '触发事件按钮',
renderTo: Ext.getBody()
});
btn.on('click', function() {
person.fireEvent('walk');
});

当点击按钮时触发事件,效果如下图所示:

现在我们使用capture()函数拦截事件的触发,如下面的代码所示:
复制代码 代码如下:

var btn2 = new Ext.Button({
id: 'cc',
text: '拦截事件',
renderTo: Ext.getBody()
});
btn2.on('click', function() {
Ext.util.Observable.capture(person, function() {
alert('fsdjhf');
return true;
});
});

这时单击btn2按钮,发现弹出对话框后还会触发事件,郁闷。。。。现在将最后一行代码改为return false试试?事件被拦截成功了吧!
  这样就给我们一个选择的机会,通过控制capture()中处理函数的返回值来决定是否继续执行某个时间的监听函数,还是直接中止该事件的发生。
我们还可以为一个对象设置多个capture()拦截函数,这些拦截函数会形成一个处理链条,只要其中任何一个拦截函数返回false,就会中止处理过程。
releaseCapture()函数是capture()函数的反向操作,它会一次性清除fireEvent()上所有的拦截函数,不过我们无法通过它准确的删除某一个拦截函数。一旦执行了releaseCapture(),那么之前设置的所有拦截函数就都失效了。