Microsoft Asp.Net Ajax框架入门(9) 事件

VS 2008

本文介绍如何定义事件监听,并订阅事件处理方法

本文例子取自<Asp.Net Ajax in action>,并稍作修改
定义一个Collection类(集合),并定义一个事件监听:当集合添加新的项时,触发itemAdded事件

/// <reference name="MicrosoftAjax.js"/>

Type.registerNamespace(
"Tristan");

Tristan.Collection 
= function() {
    
this._list = [];
    
this._eventHandlers = null;
}

Tristan.Collection.prototype 
= {
    get_list : function() 
{
        
return this._list;
    }
,
    getEventHandlers : function() 
{
        
if(!this._eventHandlers) {
            
this._eventHandlers = new Sys.EventHandlerList();
        }

        
return this._eventHandlers;
    }
,
    add_itemAdded : function(handler) 
{
        
this.getEventHandlers().addHandler("itemAdded", handler);
    }
,
    remove_itemAdded : function(handler) 
{
        
this.getEventHandlers().removeHandler("itemAdded", handler);
    }
,
    _raiseEvent : function(evtName, eventArgs) 
{
        var handler 
= this.getEventHandlers().getHandler(evtName);
        
if(handler) {
            handler(
this, eventArgs);
        }

    }
,
    add : function(item) 
{
        Array.add(
this._list, item);
        
this._raiseEvent("itemAdded"this._list.length - 1);
    }

}

Tristan.Collection.registerClass(
"Tristan.Collection");

    释义:
    1)用到一个Asp.Net Ajax Core Library内建的 Sys.EventHandlerList类,专门用于保存事件订阅。
        这个类包含几个基本的订阅事件和移出事件订阅的方法:
        addHandler(String eventId, Function handler)
            订阅事件
        removeHandler(String eventId, Function handler)
            移除事件订阅
        getHandler(string eventId)
            获得已订阅的事件处理方法
    2)_raiseEvent方法标记为私有方法,专门用于调用已触发的事件的处理方法
    3)当外部调用Collection类的Add方法时,就会触发itemAdded事件
    4)将新添加的item的index作为参数传出

编写测试代码:
pageLoad = function() {
    var c 
= new Tristan.Collection();
    c.add_itemAdded(itemAddedHandler);
    c.add(
"guozhijian");
}

function itemAddedHandler(sender, eventArgs) 
{
    alert(
"an item has been added");
    alert(eventArgs);
}

posted on 2008-02-16 13:37  Tristan(GuoZhijian)  阅读(392)  评论(0编辑  收藏  举报