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

Javascript
jquery ajax提交表单数据的两种方式
js数字输入框(包括最大值最小值限制和四舍五入)
文本框的字数限制功能jquery插件
JavaScript让IE浏览器event对象符合W3C DOM标准
为jquery.ui.dialog 增加“在当前鼠标位置打开”的功能
为jquery.ui.dialog 增加“自动记住关闭时的位置”的功能
js版扫雷实现代码 原理不错
鼠标跟随的文字变动效果
JS 判断undefined的实现代码
Ext grid 添加右击菜单
javascript或asp实现的判断身份证号码是否正确两种验证方法
javascript 获取元素位置的快速方法 getBoundingClientRect()
javascript 面向对象继承
JavaScript 地震特效
jquery.ui.progressbar 中文文档
JS 拖动效果实现代码 比较简单
JS小框架 fly javascript framework
JS在IE和FF下attachEvent,addEventListener学习笔记
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
js 动态选中下拉框

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2010-01-20   浏览: 292 ::
收藏到网摘: 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(),那么之前设置的所有拦截函数就都失效了。