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);
}