ASP.Net AJax框架已經為我們提供了組件的設計模型
下面是這些基類和接口的成員說明
Sys.Component下有兩個派生類
直接繼承Component將不提供可視功能,繼承Control和Behavior可提供可視功能。因為Control和Behavior類封裝了DOM
全局容器:Sys._Application為一個全局容器類, 維護著全局的所有Component對象的生命周期。注意,所有的控件都必須在Load時才能使用Initialize和Dispose時不能時候。
下面有一個小例子,來示例如何簡單開發一個繼承於Component類的用戶組件
首先一個繼承與Component類的組件
// JScript 文件
Type.registerNamespace("Demo");
Demo.SimpleComponent = function()
...{
//調用基類的構造函數
Demo.SimpleComponent.initializeBase(this);
}
Demo.SimpleComponent.prototype = 
...{
//重寫initialize方法
initialize : function()
...{
//調用基類的initialize方法,注意這段代碼放在我們代碼之前
Demo.SimpleComponent.callBaseMethod(this, "initialize");
alert("I have been initialized!");
},
//重寫dispose方法
dispose : function()
...{
alert("I have start dispose right now");
//調用基類的dispose方法,注意這段代碼放在我們的代碼之後
Demo.SimpleComponent.callBaseMethod(this, "dispose");
},
//組件的公開方法
sayHi : function()
...{
alert("Hello, I am the first Component");
}
}
//注冊類,基類為Sys.Component類
Demo.SimpleComponent.registerClass("Demo.SimpleComponent", Sys.Component);
首先我們需要通過ScriptManager引入組件類的JS文件
<ASP:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>...
<ASP:ScriptReference Path="~/SampleComponent.JS" />
</Scripts>
</ASP:ScriptManager>下面是如何使用組件的代
<script language="Javascript" type="text/Javascript">
function pageInit()
...{
alert("Page is initialized!");
//使用$create來創建一個組件,在pageInit方法中
//就算調用$create創建組件之後,仍然不能使用這個組件
$create(
Demo.SimpleComponent,
//使用JSon字符串的方式給組件的屬性賦值,
//這裡是給ID屬性賦值,還可以擴展
...{"id" : "simpleComponent"},
//使用JSon字符串的方式給組件的事件添加事件處理器。
...{"disposing": onDisposing}
);
}
//頁面默認的pageLoad事件處理器
function pageLoad()
...{
//通過ASP.Net AJax提供的$find方法找到組件
var simpleComponent = $find("simpleComponent");
simpleComponent.sayHi();
}
//組件的銷毀中事件處理器
function onDisposing()
...{
alert("Component is Disposing");
}
//給Application全局對象添加init事件的事件處理器
Sys.Application.add_init(pageInit);
</script>
這裡要注意一下,在組件內部重寫的dispose方法先被觸發,表示開始銷毀控件了,外部定義的onDisposing方法,表明控件已經正在銷魂中了。在dispose方法中還是可以操縱組件的內部成員的,比如說清空指令,避免內存洩漏,但是在onDisposing方法中是不能在操作組件的內部成員了的,因為已經開始銷毀組件了。
在這個例子中沒有掩飾raisePropertyChange的相關例子,在下面說明一下