轉載MS AJAX

來源:互聯網
上載者:User

ASP.NET AJAX用戶端生命週期分析(理論篇)
(1)開發人員線上 Builder.com.cn 更新時間:2007-08-31作者:朱先忠 來源:51CTO.com

本文關鍵詞: ASP.NET AJAX 用戶端 生命週期

一、引言

微軟的ASP.NET AJAX架構,作為一個相對比較完善的AJAX架構,有許多方面值得我們作深入研究。本文中,我們將結合一個具體的例子試圖探究ASP.NET AJAX架構的用戶端生命週期過程。

【注】閱讀本文最好要結合“ASP.NET應用程式生命週期概述”和“ASP.NET頁面生命週期概述”兩篇文章共同學習。

二、ASP.NET AJAX用戶端生命週期原理

因為ASP.NET AJAX架構在開發思路上極大地借鑒了ASP.NET 2.0的開發技術,而且將會被逐步“收錄”到ASP.NET 2.0中;所以,一個ASP.NET AJAX頁面也存在自己的生命週期,而且與一個ASP.NET 2.0 Web頁面生命週期之間存在很大的可比之處。

ASP.NET AJAX頁面中的用戶端事件能夠支援我們無論是針對傳統回送還是對於非同步回送(即“局部頁面重新整理”)都能定製自己的使用者介面。而且,這些事件在其整個瀏覽器端頁面生命週期中還可以協助我們管理和使用自訂的指令碼。

這些用戶端事件均集中在ASP.NET AJAX架構用戶端類庫中。當載入一個帶有ASP.NET AJAX伺服器控制項的頁面時,這些類都會由架構自動地執行個體化。藉助於這些類用戶端提供的一些API,我們能夠輕鬆地實現頁面中用戶端事件的綁定功能。因為這部分ASP.NET AJAX用戶端庫完全獨立於瀏覽器,所以我們編寫出的代碼當然可以工作在當前所有流行的瀏覽器環境中。

在眾多的用戶端事件中,最關鍵的一個事件當屬初始化請求(‘GET ’方式)和非同步回送期間Application執行個體的load事件。

【注意】當load事件處理器程式中的指令碼開始運行時,所有其它的指令碼和組件都應該已經被載入並且完全可用了。

當使用伺服器控制項UpdatePanel進行局部頁面重新整理時,所有相關用戶端事件中最重要的就是Sys.WebForms.PageRequestManager類中相關的幾個事件。這幾個重要用戶端事件協助你完全一些常規任務,例如撤銷回送,為某個回送設定更高的優先順序,還可以使UpdatePanel控制項在重新整理期間產生一定的動畫效果,等等。深入理解所有這些用戶端事件對於我們建立頁面或開發基於ASP.NET AJAX架構的組件都將有很大的協助。例如,如果你是一位網頁開發人員,你可以為頁面在載入和卸載期間使用自己的定製指令碼。
三、用戶端類解析

前面我們簡單提到過,Sys.Application類和Sys.WebForms.PageRequestManager類是在整個ASP.NET AJAX Web頁面用戶端生命週期期間兩個最主要的類。下面,我們將進行逐一分析。

當瀏覽器請求一個包含有ScriptManager控制項的頁面時,Application類就被執行個體化。Application類與伺服器端的Page控制項極其類似(Page控制項繼承自伺服器端的Control類),不過針對引發服務端事件還提供了額外的功能。類似地,Application類派生自用戶端的Sys.Component類;但是它引發的是一系列的用戶端生命週期事件。

如果一個頁面中包含一個ScriptManager控制項及數個UpdatePanel控制項,那麼這個頁面就可以實現部分更新效果(當然,如果瀏覽器支援並啟動局部更新功能的話)。在這種情況下,一個PageRequestManager類的執行個體將在瀏覽器端建立並起作用。事實上,這個PageRequestManager執行個體引發的用戶端事件都是關於非同步回送方面的。
四、為用戶端事件添加事件處理器

要針對Application類和PageRequestManager類的執行個體所引發的事件添加或移除相應的事件處理器,我們可以使用add_eventname和reomve_eventname方法來完全這些任務。下面這個例子展示了如何為Application對象的init事件添加一個名為MyLoad的事件處理器函數:

Sys.Application.add_init(MyInit);// 添加事件處理器
function MyInit(sender)
//…………
Sys.Appplication.remove_init(MyInit);//移除相應的事件處理器

這段代碼僅說明了操作的基本文法形式,後面我們將進行具體的舉例說明。

五、處理Application的Load和Unload事件

注意,要處理Application對象的load和unload事件,不需要我們顯式地綁定到把一個事件處理器函數綁定到這些事件上,而是直接使用保留關鍵字pageLoad和pageUnload建立相應的函數即可。下面這個例子展示了如何為Application的load事件添加一個事件處理器函數。

function pageLoad(sender, args) 

【作者注】線上參考資料上也這樣說—“只須使用保留關鍵字pageLoad和pageUnload建立相應的函數即可”,但要刨根問底起來:這一細節到底是在什麼地方實現?有興趣的讀者可以進一步鑽研隨同架構下載的一組“API”;這其實是一些看上去竟然有些“混亂”(估計是經過簡單的“混淆”處理)的函數。

六、其它用戶端有關的事件

在本文中,我們僅專註於探討由Application和PageRequestManager類提供的事件(因為與這兩個類相關聯的事件在兩個用戶端頁面生命週期中起著至關重要的作用)。其實,微軟的AJAX類庫還包括了一個針對DOM元素事件操作的專用類—Sys.UI.DomEvent。而以下是一些典型的用於添加、清除和移除相應事件處理器函數的全域方法。這些方法包括:

—Sys.UI.DomEvent.addHandler,簡寫為$addHandler;

—Sys.UI.DomEvent.clearHandlers,簡寫為$clearHandlers;

—Sys.UI.DomEvent.removeHandler,簡寫為$removeHandler。

但是,有關DOM元素提供的事件不是本文討論之列(而且也比較簡單)。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.