在EXT中,当我们要为按钮点击添加处理function的时候,可以看到一般人的实现分成2类:
1.使用onClick: function xx()
2.使用handler: function xx()
完成后,我们会发现,无论用哪一种实现,再点击按钮时都能触发xx这个function. 那么有人就会考虑,为什么EXT提供了2个功能一样的东西,或者说这2种方式有哪些细微的不同?
首先有一点需要明确,在Button中,onClick是一个方法,而handler是一个配置项。
接着,为了明确这2种方式本质上的区别,我们查看Button的源码:
// private
onClick : function(e){
......一系列其他无关的代码
if(this.handler){
//this.el.removeClass('x-btn-over');
this.handler.call(this.scope || this, this, e);
}
}
},
源码中可以看到,handler在onClick的实现中被调用。进一步分析,我们点击按钮的时候,又是如何会调用onClick的?看下面一段源码:
// private
initButtonEl : function(btn, btnEl){
......一系列无关的代码
if(this.repeat){
......一系列无关的代码
this.mon(repeater, 'click', this.onRepeatClick, this);
}else{
this.mon(btn, this.clickEvent, this.onClick, this);
}
},
在初始化button的el的时候,Ext通过this.mon将 'click'事件和onClick绑定在了一起。(注:这里mon方法是Ext3.x中对on方法的升级版,为了防止内存泄漏之类的)。
综上,整个流程便是: Button实例化——> 'click'事件 ——>this.onClick——>this.handler
因此,我们配置了handler,在按钮点击的时候,自然会被触发。然而另一种方式写了onClick之后哦,this.handler会失效。onClick的方式是对EXT源码的重写和覆盖,而不是调用,会破坏EXT按钮中原有的逻辑。
同时可以注意到,onClick在源码中是被标注为//private的,API中也查不到这个方法。所以在实现按钮的点击事件的时候,我们应该使用handler这个配置项,而不是重写onClick方法。
分享到:
相关推荐
Handler handler与Action相关联,一个Action可以有多个Component引用; Action是一个可被共享的对象,有五个主要的属性:text, handler, iconCls, disabled, hidden ...new Ext.Button(action)
Handler和looper详解.
handler发送和接收message的各种方式 (1)Handler.SendEmptyMessage(what); (2)Handler.obtainMessage(int what, int arg1, int arg2, Object obj).sendYToTarget(); (3)Message.obtain(handler, MESSAGE_MSG, 0, 0, ...
AsyncTask和Handler的优缺点介绍和比较
Handler,Looper和Message的理解和练习
android demo,使用Runnable和Handler的特性实现每个3s的定时器
扩展spring地址方法映射,让spring MVC开发更简便
简单完成了ViewPager实现轮播图并添加了状态切换的小圆点
通过 Foxit PDF Preview Handler 可以让你的OutLook2007预览PDF 文件。 Foxit PDF Preview Handler 1.1 For XP
在Android中使用AsyncTask和Handler线程间交互的方式,详情参见博客:http://www.cnblogs.com/plokmju/p/android_AsyncTask.html和http://www.cnblogs.com/plokmju/p/android_Handler.html
Button 倒计时,用到了Timer计时器和Handler.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
赠送jar包:netty-handler-4.1.73.Final.jar; 赠送原API文档:netty-handler-4.1.73.Final-javadoc.jar; 赠送源代码:netty-handler-...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
Handler消息机制和syncTask异步加载,有代码和文档。
整理了Handler的各种使用方法
android 中Handler 的几种写法,很简单的demo,大神简单修改下,用的是Handler.Callback,的方法
demo05: 通过handler.sendMessage和handleMessage发送处理消息 demo06: message传递bundle demo07: 加载一张网络图片 demo08: handler完成gridview的图文混排 demo09: 拦截消息,通过removeMessage() demo10: 拦截...
Android Handler类详解 Android Handler类详解 Android Handler类详解 Android Handler类详解
Looper、Handler与HandlerThread相关概念与简介
Handler和AsyncTask,面试中经常被问到的知识点,详细了解他们的区别
Handler 推荐用法 demo