999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

.NET AJAX拖放引擎內部機制分析

2009-08-25 09:37:52
消費導刊 2009年14期

陳 骙

[摘 要]拖放引擎一直是AJAX技術的典型應用之一,但由于其實現難度較大,所以多數開發員選擇第三方框架實現該效果。因為多數框架封裝了拖放引擎的底層實現,使得不少人知其然不知其所以然。本文通過分析.NET AJAX Futures CTP中提供的拖放模型,深入探討了拖放引擎的實現機制。希望本文能對AJAX開發員有所幫助。

[關鍵詞]AJAX 拖放引擎 JavaScript

一、了解工具及其作用

本文使用的工具是.NET AJAX Futures CTP。它是安裝在Visual Studio.NET 2005/2008中的一個工具包,其中包含了將在今后的ASP.NET AJAX版本中加入的額外特性[4]。雖然它能夠實現拖放效果,但目前還沒有得到微軟的支持,也沒有對應的文檔說明。

盡管使用.NET AJAX Futures CTP不如其它框架方便,但對于了解拖放引擎的底層實現和內部機制卻很有幫助。通過手動編寫代碼,可以加深對拖放引擎的理解。而且,雖然.NET AJAX Futures CTP沒有提供具體實現拖放引擎的工具,但卻給出了一個清晰的拖放引擎模型,使得開發員有章可循。

二、.NET AJAX Futures CTP中拖放引擎的內部機制分析

(一)構成拖放引擎的要素

拋開任何框架,僅從表面上來看,要想構建拖放引擎,必須具備兩個要素,即:

1.可拖放項(draggable items)可以在頁面上拖動的DOM元素。

2.投放區(drop zones)允許在其區域內投放可拖動項的DOM元素。

在.NET AJAX Futures CTP中實現拖放效果,必須手動編寫這兩個要素。

(二)NET AJAX Futures CTP拖放引擎模型

雖然許多工作需要我們自己來完成,但正如前所述,.NET AJAX Futures CTP提供了一個清晰的拖放引擎模型,使得我們有章可循。

一旦在頁面中啟用了.NET AJAX Futures CTP并引用了PreviewScript.js和PreviewDragDrop.js文件[5],則當頁面加載時,會自動創建一個一個名叫DragDropManager的全局JavaScript對象并將其存儲在Sys.Preview.UI.DragDropManager全局變量中。DragDropManager對象是.NET AJAX Futures CTP拖放引擎的核心,負責管理可拖放項和投放區。它的主要任務是:注冊可拖放項和投放區,并在拖放過程中的不同階段為它們提供反饋信息,同時協助二者進行數據交互。

首先,注冊可拖放項和投放區。DragDropManager對象提供了兩個函數將頁面上的客戶組件注冊為可拖放項和投放區。這兩個函數分別是:startDragDrop()和registerDropTarget()。值得注意的是:這兩個函數需要手動調用而且調用的時機不同。一般而言,投放區在頁面的位置是固定不變的,所以在初始化某客戶組件時即可調用registerDropTarget()函數將其注冊為投放區。而可拖放項則不同,它需要在拖放開始的時候調用startDragDrop()函數表明“拖放操作已經開始”。例如,當用戶在某圖片上按下鼠標左鍵并拖動鼠標時拖放操作開始,顯然,這時可以在mousedown事件的事件處理函數中調用startDragDrop()函數。其次,當拖放操作開始之后,DragDropManager對象要在拖放過程中為可拖放項和投放區提供反饋信息。為了接收反饋信息并對其進行處理,可拖放項需要實現IDragSource接口,而投放區需要實現IDropTarget接口[6]。這兩個接口均位于Sys.Preview.UI命名空間中,它們提供了一組函數,用于接收從DragDropManager對象傳來的反饋信息并進行處理。這兩個接口也必須手動實現。第三,除了視覺上的拖放效果外,可拖放項和投放區能夠進行數據的交互。IDragSource接口和IDropTarget接口還提供了一組用于數據交互的函數,可以使用它們為拖放過程中的不同階段進行數據處理。

綜上所述,實現一個拖放引擎的核心模型如下圖所示[7]

(三)實現拖放引擎的具體步驟

根據2.2所述的拖放引擎模型及其內部關聯機制,我們可以總結出手動實現拖放引擎的基本步驟:1.創建客戶組件;2.將客戶組件注冊為可拖動項和投放區;3.實現IDragSource接口和IDropTarget接口,完成對反饋信息的接收及拖放過程中的數據交互;4.在頁面上進行集成。以上各步驟中,1.不是本文的重點[8],4.為進行.NET AJAX編程的基本操作,但對于正真實現的拖放系統它們都是很重要的。

三、小結

本文論述了.NET AJAX Futures CTP中拖放引擎的內部機制,并提供了實現一個簡單拖放引擎的關鍵步驟,希望對學習和使用.NET AJAX框架的開發員有所幫助。拖放引擎是一個相當高級的AJAX主題,涉及了JavaScript的高級語法,創建客戶組件,客戶端頁面生命周期等一些高級技術,僅僅一篇文章無法將這些內容完全包含進去。本文只是探討拖放引擎的內部機制及實現,如果想深入了解更多的AJAX高級特性,建議閱讀參考書目中的三本書,相信它們會對您有巨大的幫助。

參考文獻

[1]JavaScript基礎教程 (美)Tom Negrino, Dori Smith 著

[2]深入淺出JavaScript (德)Christian Heilmann 著

[3]ASP.NET AJAX實戰 (意)Alessandro Gallo (美)David Barkol (美)Rama Krishna Vavilala 著

[4]原有的Visual Studio.NET 2005/2008是不包含該工具包的。該工具包可以從http://ajax.asp.net下載,該官方網站還提供了安裝該工具包的詳細步驟

[5]這兩個文件作為Web資源嵌在Microsoft.Web.Preview.dll程序集中,可以在.NET AJAX Futures CTP的安裝目錄下找到它們

[6]本文中所提到的“類”,“對象”,“接口”,“命名空間”均是使用JavaScript模擬實現,因為JavaScript本身并沒有提供這些語法功能。具體可閱讀參考書目[3]

[7]該圖引自參考書目[3]

[8]創建客戶組件是相當高級的。NET AJAX主題,本文從本質上來說就是在創建可拖放的客戶組件,所以本文建立在讀者已經了解.NET AJAX客戶組件的基礎上

主站蜘蛛池模板: 青草视频久久| 丰满的熟女一区二区三区l| 国产欧美日韩va另类在线播放 | www.亚洲一区二区三区| 四虎永久在线精品影院| 黄色三级网站免费| 色综合手机在线| 午夜国产大片免费观看| 国产成在线观看免费视频| 亚洲经典在线中文字幕| 久久精品丝袜| 国产精品视频免费网站| 中文字幕佐山爱一区二区免费| 国产区在线观看视频| 國產尤物AV尤物在線觀看| 国产特级毛片aaaaaaa高清| 色妞永久免费视频| 天天激情综合| 手机在线免费毛片| 久久精品免费国产大片| 欧美成人免费一区在线播放| 国产无码在线调教| 中文无码精品A∨在线观看不卡| 欧美精品成人| 国产成人精品18| 国产精品无码影视久久久久久久 | 精品国产Av电影无码久久久| 日韩第九页| 国产福利拍拍拍| 欧美中出一区二区| 青青国产视频| 香蕉久人久人青草青草| 99精品免费欧美成人小视频| 中文字幕日韩丝袜一区| 亚洲va欧美va国产综合下载| 99这里只有精品在线| 亚洲精品国产精品乱码不卞| 国产极品粉嫩小泬免费看| 国产黄色免费看| 一本久道久综合久久鬼色| 久久9966精品国产免费| 精品久久国产综合精麻豆| 四虎永久在线| 午夜福利免费视频| 日本精品中文字幕在线不卡| 米奇精品一区二区三区| 在线观看91香蕉国产免费| 国产亚洲一区二区三区在线| 在线播放国产一区| 中文字幕第4页| 国产精品99久久久久久董美香| 亚洲日本中文字幕天堂网| 日韩在线观看网站| 玖玖精品视频在线观看| 暴力调教一区二区三区| 国产免费久久精品44| 国产亚洲精品97AA片在线播放| 狠狠色综合久久狠狠色综合| 久久九九热视频| 国产一区二区精品福利| 久草热视频在线| 潮喷在线无码白浆| 国产欧美日韩在线一区| 欧美色综合网站| 久草国产在线观看| 午夜免费小视频| 强奷白丝美女在线观看| 国产91精品最新在线播放| 青青青视频免费一区二区| h视频在线观看网站| 日韩欧美中文在线| 欧美成人综合在线| 亚洲日韩AV无码一区二区三区人| 欧美啪啪一区| 无码人中文字幕| 国产永久在线观看| 天天摸天天操免费播放小视频| 成·人免费午夜无码视频在线观看| 欧美日韩在线第一页| 色综合久久无码网| 一区二区午夜| 拍国产真实乱人偷精品|