【转】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工作过程分析相关推荐
- ArcGIS.Server.9.2.DotNet在ElementGraphicsLayer画点、线、折线、面、圆、矩形的代码
ArcGIS.Server.9.2.DotNet在ElementGraphicsLayer画点.线.折线.面.圆.矩形的代码: 1public class AddTool:IMapServerTo ...
- 总结基于ArcGIS Server 9.2 Dot Net ADF的WebGIS项目部署问题
过去的几个月内对基于ArcGIS Server9.2的开发有所接触,这也是第一次真正自己动手作WebGIS的开发,期间遇到诸多问题.最突出的就是二次开发WebGIS的部署问题,以及字符集冲突的问题.问 ...
- ArcGIS.Server.9.2.DotNet自带例子分析(一、二)
目的: 1.arcgis server9.2 ADF的无刷新机制. 准备: 1.(一.一)的工程,具体见前篇. 开始: 1. 先把上篇里漏下的ScaleBar(比例尺)和Magnifier(放大镜)功 ...
- ArcGIS.Server.9.2.DotNet自带例子分析(三、一)
目的: 1.arcgis server9.2 ADF的AddGraphics. 准备工作: 1.用ArcGis Server Manager或者ArcCatalog发布一个叫world的Map Ser ...
- arcgis server for .NET学习转载5
http://www.cnblogs.com/hll2008/archive/2008/08/18/1269810.html 目的: 1.arcgis server9.2 ADF的Callback机制 ...
- 创建一个简单的ArcGIS Server ASP.NET网页
过程描述 在运行这个例子前,在网络服务器上必须安装好.NET ADF,ArcGIS Server已经安装并正常运行,达到所有的系统要求. 1.创建一个ASP.NET应用目录.可以按照下面步骤创建: A ...
- ArcGIS Server 问题
摘自ESRI公司网站. ------------------------------------------- 内容摘要 本指导描述了如何配置Windows XP SP2防火墙,使得ArcGIS Se ...
- ArcGIS Server .Net Web ADF体系结构
ArcGIS Server .Net Web ADF体系结构 ArcGIS Server .net来创建应用有三个层次, 1 使用manager来创建一个web应用 2 使用 .net模板来创建应用 ...
- 【转】关于arcgis server ADF的几种超时
我发现下面的提示英文的很不爽: session has timed out from extended inactivity a new session must be started to use ...
最新文章
- 开发者AI职业指南:CSDN《AI技术人才成长路线图V1.0》重磅发布
- 017——VUE中v-fo指令的使用方法
- SpringMVC注解@RequestParam全面解析
- hdu 1055(贪心)
- 1033. 旧键盘打字(20)
- 【HDOJ】4358 Boring counting
- 面试题:彻底搞懂 Cookie 和 Session
- 【阿里巴巴-CVPR2020】频域学习,Learning in the Frequency Domain
- PAT 1069. 微博转发抽奖(20)-乙级
- 关于FTP的两种连接模式
- Java将多张图片合并保存到同一页PDF中
- 打造知识服务市场 知乎的变现之路
- C语言表白流星(末尾附加下载地址)
- NLP基础--single-pass 聚类算法
- 闲聊机器人实例四:python实现小姜机器人(检索式chatbot_sentence_vec_by_bert_bert句向量)
- MS VC6 链接错误处理
- freeipa证书相关的一些命令
- JDBC的驱动包下载汇总
- Java实现文件查重去重
- 梅森旋转(Mersenne twister)及其他随机数生成算法