日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

EXT按钮事件

發布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 EXT按钮事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在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的?看下面一段源碼:

?

// privateinitButtonEl : 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與listener的區別

ExtJS里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生效。

按鈕事件
<html>
<head><title>演示</title>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<link rel="stylesheet" type="text/css" media="all" href="extjs/resources/css/ext-all.css" />
<script type="text/javascript" src="extjs/adapter/ext/ext-base.js"></script>
<script type="text/javascript" src="extjs/ext-all.js"></script><script src="extjs/build/locale/ext-lang-zh_CN.js"></script><script type="text/javascript">
Ext.onReady(function(){var buttonName = new Ext.Button({id:"buttonName",text:"這是一個按鈕",//tooltip:"提示信息:Button組件基本用法",//提示信息,如果需要顯示提示信息,需要使用Ext.QuickTips.init();//tooltipType:"title", //定義顯示提示信息的類型,有qtip和title兩種方式,默認是qtiptype:"button", //按鈕類型:可以是submit, reset or button  默認是 button//autoShow:true,  //默認false,自動顯示// hidden:false,  //默認false,是否隱藏//hideMode:"offsets", //隱藏方式,默認display,可以取值:display,offsets,visibility//cls:"cssButton", //樣式定義,默認""//disabled:false, //是否可用,默認false// disabledClass:"",  //默認x-item-disabled//enableToggle:true, //默認false//pressed:false, //設置按鈕是否已經被按下,默認是false//html:"Ext",//默認""// handleMouseEvents:true, //默認true,如果為false,那么mouseout mouseover就不能被觸發//x:number,y:number,在容器中的x,y坐標handler:function(){Ext.Msg.alert('提示消息框','測試Button組件:handler事件!');},//添加事件listeners:{//添加監聽事件 可以結合handler測試這兩個事件哪個最先執行"click":function(){Ext.Msg.alert('提示消息框','測試Button組件:listeners事件!');//Ext.getCmp("buttonName").hide();//隱藏按鈕}},//cls:"x-btn-text-icon",//添加圖標前需要設置該屬性//icon:"house.gif", //圖標的地址//plugins : Object/Array 擴展插件時使用// repeat:false,  //默認false ,如果為true,需要設置mouseover事件renderTo:Ext.getDom("hello") //將組件的顯示效果渲染到某個節點的ID});});</script>
</head></head>
<body>
<div id="hello"></div></body>
</html>

注意:handler注釋才會listeners,不然只會handler?

ETX系列:

EXT基礎

EXT表單

EXT表格

EXT事件

EXT窗口

EXT按鈕事件

總結

以上是生活随笔為你收集整理的EXT按钮事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。