Sys.EventHandlerList クラス
更新 : 2007 年 11 月
イベント名をキーとし、関連ハンドラを値とする、コンポーネントのクライアント イベントのディクショナリを作成します。
名前空間 : Sys
継承 : なし
var e = new Sys.EventHandlerList();
コンストラクタ
名前 |
説明 |
---|---|
EventHandlerList クラスの新しいインスタンスを初期化します。 |
メンバ
名前 |
説明 |
---|---|
ハンドラを EventHandlerList インスタンスの指定したイベントにアタッチします。まだ存在していない場合は、指定したイベントをリストに追加します。 |
|
それを呼び出すと、指定されたイベントのすべてのハンドラを順番に呼び出すことができるような、単一のメソッドを返します。 |
|
EventHandlerList インスタンスの指定したイベントからイベント ハンドラを削除します。 |
解説
EventHandlerList クラスを使用し、カスタム ASP.NET AJAX コンポーネントでクライアント イベントを処理します。EventHandlerList クラスは、各イベントとそのハンドラの中心的な参照場所を、スクリプト ブロック、コンポーネント、またはスクリプト リソース ファイルとして提供します。
メモ : |
---|
このクラスは、クライアント コンポーネント開発でのみ使用します。コンポーネント開発以外の目的でイベント処理には使用しません。また、DOM イベント バインディングにも使用しません。 |
このイベントを発生させるには、発生させるイベント ID を id パラメータに設定して getHandler メソッドを呼び出します。さらに、getHandler から返されたメソッドを呼び出します。この呼び出しにより、イベントのすべてのハンドラが順番に呼び出されます。
Sys.Component の派生クラスでは、Sys.Component 基本クラスの events プロパティを使用して、EventHandlerList の実行時インスタンスにアクセスできます。詳細については、「Sys.Component.events プロパティ」を参照してください。
使用例
カスタム ASP.NET AJAX コントロールで EventHandlerList クラスを使用する方法の例を次に示します。カスタム クラスの作成方法の詳細については、「カスタム AJAX クライアント コントロールの作成」を参照してください。この例の基になるコントロール全体を説明しています。
// Register namespace.
Type.registerNamespace("Demo");
Demo.HoverButton = function(element) {
Demo.HoverButton.initializeBase(this, [element]);
// Create delegates in the Constructor.
this._clickDelegate = null;
}
Demo.HoverButton.prototype = {
// Bind and unbind to click event.
add_click: function(handler) {
this.get_events().addHandler('click', handler);
},
remove_click: function(handler) {
this.get_events().removeHandler('click', handler);
},
initialize: function() {
var element = this.get_element();
// Bind handler to delegate.
if (this._clickDelegate === null) {
this._clickDelegate = Function.createDelegate(this, this._clickHandler);
}
Sys.UI.DomEvent.addHandler(element, 'click', this._clickDelegate);
Demo.HoverButton.callBaseMethod(this, 'initialize');
},
_clickHandler: function(event) {
var h = this.get_events().getHandler('click');
if (h) h(this, Sys.EventArgs.Empty);
},
// Release resources before control is disposed.
dispose: function() {
var element = this.get_element();
if (this._clickDelegate) {
Sys.UI.DomEvent.removeHandler(element, 'click', this._clickDelegate);
delete this._clickDelegate;
}
Demo.HoverButton.callBaseMethod(this, 'dispose');
}
}
// Register the class.
Demo.HoverButton.registerClass('Demo.HoverButton', Sys.UI.Control);
// Notify the ScriptManager that this is the end of the script.
if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>EventHandlerList Example</title>
</head>
<body>
<form id="form1" runat="server">
<div id="ResultDisplay"></div>
<asp:ScriptManager runat="server" ID="ScriptManager01">
<scripts>
<asp:ScriptReference Path="HoverButton.js" />
</scripts>
</asp:ScriptManager>
<script type="text/javascript">
var app = Sys.Application;
// Add the handler function to the pageLoad event.
app.add_load(applicationLoadHandler);
function applicationLoadHandler(sender, args) {
$create(
Demo.HoverButton,
{element: {style: {borderWidth: "2px"}}},
// Bind the start function to the click event.
{click: start},
null,
$get('Button1')
);
}
function start(sender, args) {
alert("The start function handled the HoverButton click event.");
}
</script>
<button type="button" id="Button1" value="HoverButton">
HoverButton
</button>
</form>
</body>
</html>