日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】ArcGIS.Server.9.2.DotNet的ADF的Toolbar工作过程分析

發布時間:2023/12/9 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】ArcGIS.Server.9.2.DotNet的ADF的Toolbar工作过程分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目的:
1.ArcGIS.Server.9.2.DotNet的ADF的Toolbar工作過程原理。
開始:

Toolbar工作過程:
一.初始化過程(在頁面生成的時候Toolbar控件會生成和它相關的html代碼和javascript代碼):
???? 1.根據每一個子Tool生成一個<TD>...</TD>,并且這個TD元素添加onMouseDown、onMouseOver、onMouseOut三個鼠標事件,這樣使得TD可以點擊執行不同的功能。
???? 2.在javascript中初始化Toolbar1_Items數組,用ToolbarItemObject初始化每一個子Tool添加到Toolbar1_Items數組中。
???? 3.初始化Toolbars數組,用ToolbarObject初始化Toolbar1添加到Toolbars數組中。
???? 4.初始化ToolbarGroups數組,ToolbarGroupObject初始化添加到ToolbarGroups數組。
???? 5.對Toolbar1對象賦一些初始化屬性。
二.執行過程(從點擊到提交服務端的整個過程):
?????1.當Toolbar的Tool被點擊時會執行onMouseDown事件的ToolbarMouseDown方法,這個方法定義在ADF的display_toolbar.js中,對于onMouseOver、onMouseOut這2個事件沒有實質性的功能是顯示效果的切換而已。
???? 2.ToolbarMouseDown方法執行會根據點擊的Tool類型進行不同的處理,對于Command和DropDownBox類型的Tool就調用postBack方法直接向服務端進行提交而且對于Tool類型的Tool則根據ClientAction類型調用不同的方法設置地圖的操作狀態。
???? 3.Tool類型的Tool的ClientAction類型內置了很多如Point、Line、Polyline等根據這個類型會分別調用MapPoint、MapLine、MapPolyline等方法設置地圖的操作狀態,這些MapPoint方法等是定義在ADF的display_map.js文件中,這些方法執行會調用map對象的setTool的方法設置地圖操作狀態。
???? 4.設置完地圖操作狀態就接下來,是進行地圖操作了該畫點的就畫點該畫線的就畫線了。這些操作是對地圖進行操作了那么這些操作代碼肯定是在map對象上了,上面的setTool的方法會為map對象的divObject設置onmousedown事件
???? 5.接著往下執行onmousedown事件調用方法MapMouseDown,這個方法會根據操作類型是結束操作提交結果還是繼續設置onmouseup和onmousemove,這個是根據操作類型決定,比如一次性操作的畫點到這里就結束操作調用postBack方法向服務端提交結果,而連續操作的畫線到這里還需要往下操作就設置onmouseup和onmousemove。
???? 6.最后就執行onmouseup事件的方法MapMouseUp向服務端提交操作結果完成所有動作。
???? 7.上面無論哪種類型的操作殊途同歸最終都是需要調用postBack方法向服務端提交結果完成操作,這個postBack方法定義在ADF的display_dotnetadf.js文件中。
???? 8.繼續看postBack方法,這個方法執行會調用clientPostBack方法,這個方法是通過eval(callBackFunctionString)方法實現向服務端的提交,跟蹤調試可以看到eval(callBackFunctionString)其實就是執行WebForm_DoCallback('Map1',argument,processCallbackResult,context,postBackError,false)這樣的方法,到這里一切都明朗了,ADF的類庫最終也是通過這種方式像服務端提交數據了,這個和我們自己用Page.ClientScript.GetCallbackEventReference方法產生腳本字符串放在客戶端執行一樣。
???? 9.現在把ADF產生的WebForm_DoCallback和我們自己用Page.ClientScript.GetCallbackEventReference方法的做一個比較:
??????? ADF: WebForm_DoCallback('Map1',argument,processCallbackResult,context,postBackError,false)
??????? 自己:WebForm_DoCallback('__Page',argument,processCallbackResult,context,processCallbackError,true)
????10.看上面這2個方法最大的區別就是請求的目標對象不同一個是“Map1”控件一個是“__Page”頁面了,由此可見“Map1”控件肯定實現了ICallbackEventHandler的接口
?,它能處理ADF腳本方法提交的請求。
??? 11.更進一步,我們在使用Toolbar控件時可以為Tool設置處理的類功能,就是給Tool設置ServerActionAssembly和ServerActionClass屬性,這樣就說明Map控件還具有一個功能就是能根據發起請求的Tool不同載入我們定義的ServerActionClass類來處理Tool的請求,這樣就達到了讓用戶自己定義Tool的服務端的處理功能。
?
總結:通過對Toolbar工程流程的分析的目的就是能用自己的方式來靈活實現Toolbar的功能而不需要使用死板的Toolbar控件,這個是在前一篇(ArcGIS.Server.9.2.DotNet實現類似GoogleMap的操作工具條(ADF的Toolbar太丑))的延續尋找更加優雅的解決方法。
???????? 根據上面的流程分析要拋開Toolbar控件有2個工作:第一個就是更改腳本端WebForm_DoCallback提交時的目標對象把原先的"Map1"控件改成我們自己的實現了ICallbackEventHandler接口頁面或者自己的控件。第二個就是讓我們的頁面或控件能實現類似Map1控件的載入ServerActionClass類這樣的功能。這個只是初步才想法了,具體的實現下一篇在寫。

原文出處:http://www.cnblogs.com/hll2008/archive/2008/10/04/1303713.html

轉載于:https://www.cnblogs.com/aooyu/archive/2009/11/06/1597185.html

總結

以上是生活随笔為你收集整理的【转】ArcGIS.Server.9.2.DotNet的ADF的Toolbar工作过程分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。