資料來源: 次世代 Ajax 解決方案 EXTjs 開發實戰
作者:徐會生、何啟偉、康愛媛


Chapter 2 Ext 框架基礎:

2.1 Ext的事件和類別
(1) Ext 事件類型: a.自訂事件 b.瀏覽器事件

2.1.1 自訂事件

(1) Ext之事件模型
 所有繼承自 Ext.util.observable 類別的控制項皆可以支援事件。
因此可對這些繼承自 Ext.util.observable 的物件定義事件,並為這些事件配置監聽器。
當某個事件被觸發,Ext會自動呼叫對應的監聽器,此即為Ext之事件模型。

例2-1: 如何設計 Person 類別並為其配置事件監聽器

Step1: 定義Person類別
Person = function(name){
     this.name = name;
     this.addEvents(“walk”,”eat”,”sleep”);
}

Ext.extend(Person, Ext.util.observable, {
      info: function(event) {
              return this.name + ‘is’ + event + ‘ing.’;
      }
});

說明: (a) 此例定義了一個Person物件,擁有一個屬性 name。
        (b) 使用 this.addEvent() 函式定義了 walk、eat與sleep三個自訂事件。
        (c) 使用 Ext.extend() 讓Person物件繼承Ext.util.observable所有屬性。
             並擴充一個新函數 info(),並設計info() 函式可傳回Person的資訊。

Step2: 建立Person實體物件(instance),並為其事件配置監聽器(listener)
var person = new Person(‘Lingo’);
person.on(‘walk’ , function() {
    Ext.Msg.alert(‘event’ , person.name + “is walking…”);
});
person.on(‘eat’, function(breakfast , lunch, supper){
    Ext.Msg.alert(‘event’, person.name + “want to eat” + breakfast + “and ”+ lunch + “and ” + supper + “.”);
});
person.on(‘sleep’, function(time) {
    Ext.Msg.alert(‘event’,person.name + “從” + time.format(“H”) + “點開始睡覺。”);
})

說明: (a) on為 addListener() 的簡寫型式。
        (b) on函式第一個函數為事件名稱,第二個參數為事件發生時所執行的函數。

Step3: 觸發事件
Ext.get(‘walk’).on(‘click’ , function{

person.fireEvent(‘walk’);
});

Ext.get(‘eat’).on(‘click’, function(){
person.fireEvent(‘eat’, ‘早餐’, ‘午餐’, ‘晚餐’);
});

Ext.get(‘sleep’).on(‘click’,function(){
person.fireEvent(‘sleep’, new Date());
});

說明: (a) 呼叫fireEvent() 即觸發函式,傳入一個事件名稱,其對應之監聽函式即會執行。
        (b) 與 on() 相反,un()為removeListener() 函式的簡寫,用途為刪除某事件之對應函數。
        (c) 另有一purgeListeners() 函數,可將所有監聽器刪除。

2.1.2 瀏覽器事件
(1) 主要使用 Ext.EventManager、Ext.EventObject與 Ext.lib.Event對原生瀏覽器事件進行包裝。
(2) HTML瀏覽器事件屬於單一綁定,Ext框架則是對於同一個事件可以綁定至多個事件處理控制碼上。

例2-2:
HTML:
var e=document.getElementById(“test”);
e.onclick=function(){alert(“handle1”)};
e.onclick=function(){alert(“hangle2”)}
==> 按下 test後,只會顯示 handle2提示框。

Ext:
Ext.onReady( function(){
    var test = Ext.get(‘test’);
    test.on(‘click’, function() {
    alert(“handle1”);
    });

    test.on(‘click’, function(){
    alert(“handle2”);
    });
});

==> 按下 test 後,handle1 與 handle2 提示框皆會依序顯示。

arrow
arrow
    全站熱搜

    Nick0305 發表在 痞客邦 留言(1) 人氣()