Ext.Button點擊事件的三種寫法及比較

ExtJs的寫法太靈活了,現在收集了關於Button點擊事件的三種寫法。今天做一個記錄,以後備查。
首先創建一個JS文件寫入以下代碼:
1.點擊默認爲
handler
Ext.onReady(function(){
           
            new Ext.Button({
                text:"
確定"
,
                //
BUTTON畫在BODY中
                renderTo:Ext.getBody(),
                //BUTTON的寬度
                minWidth:100,
                id:"mybutton"
                //點擊事件
                handler:function(){
                    Ext.MessageBox.show({
                        title: '提示' ,
                        msg: '
你點擊了我!' ,
                        buttons: Ext.MessageBox.OK ,
                        fn: function(){} ,
                        icon: Ext.MessageBox.INFO
                    });
                }
        });
 });


2.添加監聽方法,監聽click事件。注意
listeners不要少s
Ext.onReady(function(){
           
            new Ext.Button({
                text:"確定"
                //將BUTTON畫在BODY中
                renderTo:Ext.getBody(),
                //BUTTON的寬度
                minWidth:100,
                id:"mybutton",
                //點擊事件
                listeners:{
                    "click":function(){
                        Ext.MessageBox.show({
                            title: '提示' ,
                            msg: '你點擊了我!' ,
                            buttons: Ext.MessageBox.OK ,
                            fn: function(){} ,
                            icon: Ext.MessageBox.INFO
                        });
                    }
                }
        });
 });


3.如果自己開發了多個組件,需要交互,可能要將事件寫在外面達到鬆耦合的目的。
JS中的代碼如下:
Ext.onReady(function(){
           
            new Ext.Button({
                text:"確定"
                //將BUTTON畫在BODY中
                renderTo:Ext.getBody(),
                //BUTTON的寬度
                minWidth:100,
                id:"mybutton"
        });
 });


網頁代碼中如下:
<script type="text/javascript">
   
    Ext.onReady(function(){
        //
獲得組件
        var btn = Ext.getCmp("mybutton");
        //
綁定點擊事件
        btn.on("click" , function(){
                        Ext.MessageBox.show({
                            title: '
提示' ,
                            msg: '
你點擊了我!' ,
                            buttons: Ext.MessageBox.OK ,
                            fn: function(){} ,
                            icon: Ext.MessageBox.INFO
                        });
                    });
    });
   
</script>

 handler與listener的區別

Handler

handler與Action相關聯,一個Action可以有多個Component引用;

Action是一個可被共享的對象,有五個主要的屬性:text, handler, iconCls, disabled, hidden

component的構建方式比較有意思:

new Ext.Button(action)

是Button接收一個Action對象作爲構造參數嗎?但是查看Button的API卻沒有發現action屬性。反而Button的構造參數是一個(Object config),也就是說,只是一個配置對象(包含各種屬性),而Action的五個屬性正好Button也都有,所以,可以接收一個Action來進行構造。

其他屬性不考慮,看handler,Button中的handler配置項文檔說明,這個handler是與click Event關聯的。也就是說,click是Button這個Component的首要Event(參考Action中handler的文檔),這就是Handler的運行方式:被某個組件的首要Event所觸發

 

Listener

上面說了handler是對首要Event的響應函數,而關於Event, Observable纔是根源。

Ext.util.Observable是一切可進行事件監測之對象的父類(或者接口)。Observable只有一個配置項,那就是listeners,而一個listener是一個事件名 + 處理函數的組合,如:

"click" : function(){...}, "mouseOver" : function(){....}

Observable還提供了很多相關的處理事件的方法,比如添加事件,觸發事件,移除監聽器等等。

 

由上分析可以總結一下:

1、handler是一個特殊的listener;

2、handler是一個函數,而listener是<event , 函數>對;

3、handler與Action相關,用來讓多個組件共享一個Action。而listener與Event相關,可以對Event進行方便的管理;

 

但是handler與普通的event + listener組合還是有一些不同,一個例子就是,如果用

Ext.util.Observable.capture(button, function(name){ if (name=="click") return false})

來事先捕獲click事件,並阻止click時,如果Button的click是通過handler來響應的,則capture的return false函數無效,而如果button是定義了包含click事件的listener,則上面的capture生效。

轉載地址:http://blog.csdn.net/tigerking168/article/details/7483200

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章