English Version: http://dflying.dflying.net/1/archive/122_build_your_own_actions_in_aspnet_atlas.html
Action是ASP.NET Atlas中繼承於Sys.Action基類的的一類組件,用來實現一類由某個事件引發的事件處理功能。Action與事件處理函數的功能類似,但它是一類泛化了的事件處理組件,用來描述一些常見的,通用的事件處理方法,例如調用某個方法,設定某個對象的某個屬性,引發一個PostBack等。
我們都知道,目前為止,Atlas最好的參考手冊就是它的原始碼。我們可以從原始碼中找到如下三種Atlas的內建Action,他們都繼承於Sys.Action基類:
- Sys.InvokeMethodAction:用來調用一個指定的函數。
- Set.SetPropertyAction:用來設定某個對象的某個屬性值。
- Sys.WebForms.PostBackAction:用來引發一個PostBack。
在實際的項目中,僅僅使用以上三個內建的Action往往是不夠的,我們通常會需要自己定義一些在項目中常用的Action。幸運的是,在Atlas完備的架構中,建立自訂的Action將是非常簡單的事情。下面讓我們通過一個簡單的AlertAction樣本來熟悉自訂Action的方法。當某個指定的事件被引發時,AlertAction將顯示給使用者一個JavaScript提示對話方塊,內含指定的文字。
通常的,建立自訂的Action有如下四個步驟:
- 繼承於Sys.Action基類。
- 定義您的Action類的屬性。在AlertAction的樣本中,我們需要指定一個message屬性用來儲存將要顯示給使用者的內容。
- 實現performAction()方法,以執行您需要的自訂動作。這個方法將被Action基類自動調用。在我們的樣本中,只是簡單的使用JavaScript中的內建alert()函數來彈出對話方塊,並顯示message屬性中的內容。
- 為您的自訂Action 在getDescriptor()方法中添加相關的類型說明。
下面是AlertAction的JavaScript代碼。上述四個步驟在代碼內以注釋的形式標出。將下面的代碼儲存為AlertAction.js。
Sys.AlertAction = function() {
Sys.AlertAction.initializeBase(this);
// step 2
var _message;
this.get_message = function() {
return _message;
}
this.set_message = function(value) {
_message = value;
}
// step 4
this.getDescriptor = function() {
var td = Sys.AlertAction.callBaseMethod(this, 'getDescriptor');
td.addProperty('message', String);
return td;
}
// step 3
this.performAction = function() {
alert(_message);
return null;
}
}
// step 1
Sys.AlertAction.registerSealedClass('Sys.AlertAction', Sys.Action);
Sys.TypeDescriptor.addType('script', 'alertAction', Sys.AlertAction);
讓我們在頁面中測試一下這個AlertAction。這裡需要在頁面上添加的僅僅是一個Button,用來引發我們的AlertAction。下面是ASPX檔案中的HTML定義。不要忘記在ScriptManager中添加對AlertAction.js檔案的引用。
<atlas:ScriptManager EnablePartialRendering="true" ID="ScriptManager1" runat="server">
<Scripts>
<atlas:ScriptReference Path="AlertAction.js" />
</Scripts>
</atlas:ScriptManager>
<div>
<input id="myButton" type="button" value="Click Me!" />
</div>
下面是Atlas指令碼定義,十分簡單,這裡不再贅述。
<script type="text/xml-script">
<page xmlns:script="http://schemas.microsoft.com/xml-script/2005">
<components>
<button id="myButton">
<click>
<alertAction message="Button Clicked!" />
</click>
</button>
</components>
</page>
</script>
瀏覽器中的運行結果:
上述樣本程式可以在此下載:http://files.cnblogs.com/dflying/AtlasActionDemo.zip