【转】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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299672.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学妹问我Java枚举类与注解,我直接用这个搞定她!

很多人问我学妹长什么样&#xff0c;不多说 上图吧&#xff01; 学妹问我Java枚举类与注解&#xff0c;我直接一篇文章搞定&#xff01;一、枚举类① 自定义枚举类② enum关键字定义枚举类③ enum 枚举类的方法④ enum 枚举类实现接口二、注解① 生成文档相关注解②注解在编译…

[转]张孟苏考上的不是大学

原文&#xff1a;http://blog.sina.com.cn/s/blog_4910bb430100a5gy.html 张孟苏考因为助人为乐得到来新加坡读书的机会&#xff0c;作为一个在新加坡生活了十年的人&#xff0c;我向她表示祝贺。但为了对社会负责&#xff0c;对读者负责&#xff0c;我决定写这篇文章。 许多人…

bitmapdata的知识点

flashplayer的cpu渲染 bitmapData占用的内存分两块&#xff0c;一块是原始数据区&#xff0c;另一块是解压后的内存区10秒内如果没有使用这个bitmapdata&#xff0c;解压后的内存区会被释放&#xff0c;当10秒后重新使用&#xff0c;这个bitmapdata会再次解压&#xff0c;所以就…

设计模式之代理

代理模式介绍啥是代理模式&#xff1f;代理模式 是一种结构型设计模式&#xff0c;让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问&#xff0c;并允许在将请求提交给对象前后进行一些处理。其实说通俗点&#xff0c;就好比我们平时生活中的购买机票&#xff…

PHP 的历史

PHP/FI PHP 继承自一个老的工程&#xff0c;名叫 PHP/FI。PHP/FI 在 1995 年由 Rasmus Lerdorf 创建&#xff0c;最初只是一套简单的 Perl 脚本&#xff0c;用来跟踪访问他主页的人们的信息。它给这一套脚本取名为“Personal Home Page Tools”。随着更多功能需求的增加&#x…

linux主要系统服务介绍

linux主要系统服务介绍 apmd&#xff0d;&#xff0d;apmd用来监视系统用电状态&#xff0c;并将相关信息通过syslogd写入日志。也可以用来在电源不足时关机arpwatch&#xff0d;&#xff0d;用来维护以太网物理地址和ip地址的对应关系atd&#xff0d;&#xff0d;运行用户用at…

轮子,辛苦你了。 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源帅哥李坏的朋友圈&#xff0c;侵权删&#xff09;

这次牛逼了,面试字节被问LinkedList原理了!手足无措啊

概述 LinkedList底层是基于链表实现。链表没有长度限制&#xff0c;内存地址不需要固定长度&#xff0c;也不需要是连续的地址来进行存储&#xff0c;只需要通过引用来关联前后元素即可完成整个链表的连续。所以链表的优点就是添加删除元素比较快&#xff0c;只需要移动指针&a…

[WP8.1UI控件编程]Windows Phone自定义布局规则

3.2 自定义布局规则 上一节介绍了Windows Phone的系统布局面板和布局系统的相关原理&#xff0c;那么系统的布局面板并不一定会满足所有的你想要实现的布局规律&#xff0c;如果有一些特殊的布局规律&#xff0c;系统的布局面板是不支持&#xff0c;这时候就需要去自定义实现一…

聊聊编程语言的选择

我适合学什么编程语言呢&#xff1f;大家好&#xff0c;我是鱼皮&#xff0c;今天聊聊编程语言的选择问题&#xff0c;通过对 10 主流编程语言的特点、优劣、应用场景、发展前景等简单分析&#xff0c;希望帮还在迷茫的小伙伴们选择最适合自己的语言去学习。编程语言选择本文大…

IIS6文件权限不对触发了Windows身份认证问题解决方法

今天在iis上调试程序的时候突然发现需要登录: 通过csdn提问得知可能是权限设置有问题于是设置了下internet来宾用户: 结果问题没有解决.后来想想应该不是问题,因为我在自己机器上调试用的是Everyone权限,应该都可以访问. 于是我又去用户管理中重置internet来宾用户密码: 重置In…

C++ Exercises(十五)--排序算法的简单实现

structNode {//队列结点 int data; struct Node* pNext;};classCQueue{//队列类(带头结点&#xff09;public: CQueue(void); ~CQueue(void); bool isEmpty()const;//是否为空 void EnQueue(int num);//入队列 int DeQueue();//出队列 int Front()cons…

朋友圈终于能斗表情包了,会发表情包您就多发点!

全世界只有3.14 % 的人关注了青少年数学之旅今日&#xff0c;微信ios端更新至7.0.9版本&#xff0c;又上了一次微博热搜。版本新增了朋友圈图片评论功能&#xff0c;动态图、静态图均可&#xff0c;点击图片评论即可查看大图&#xff0c;评论图片同步聊天表情包库。各路网友收到…

银行业务调度系统

设计思路&#xff1a; &#xff08;1&#xff09;有三种对应类型的客户&#xff1a;VIP客户&#xff0c;普通客户&#xff0c;快速客户&#xff0c;异步随机生成各种类型的客户&#xff0c;各类型客户在其对应窗口按顺序依次办理业务。 &#xff08;2&#xff09;有三个类。Num…

我已经把它摸的透透的了!!!Spring 动态数据源设计实践,全面解析

[ Spring 动态数据源 动态数据源是什么&#xff1f;它能解决什么&#xff1f;&#xff1f;&#xff1f; 在实际的开发中&#xff0c;同一个项目中使用多个数据源是很常见的场景。比如&#xff0c;一个读写分离的项目存在主数据源与读数据源。 所谓动态数据源&#xff0c;就…

EF Core 异步编程注意要点

????欢迎点赞 &#xff1a;???? 收藏 ⭐留言 ???? 如有错误敬请指正&#xff0c;赐人玫瑰&#xff0c;手留余香&#xff01;????本文作者&#xff1a;由webmote 原创&#xff0c;????作者格言&#xff1a;生活在于折腾&#xff0c;当你不折腾生活时&#x…

AJAX+JavaScript无刷新检查用户名

AJAXJavaScript无刷新检查用户名是否可用2009-04-20 16:26 JavaScript 和 Ajax 代码<script language"javascript" type"text/javascript">var xmlHttp null; function createXMLHttp() { if(window.ActiveXObject) …

Cisco路由器密码恢复

Cisco路由器密码恢复1、必需先用终端方式接CONSOLE口&#xff0c;进入终端状态&#xff1b;2、开路由器电源&#xff1b;3、在60秒内&#xff0c;按Ctrl Break键&#xff0c;中断路由器的启动进程&#xff0c;使其进入ROM监控模式&#xff0c;提示符为"rommon >"或…

看电影的第一大禁忌 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;

C++经典面试题

1、int a5&#xff0c;则 (a)的值是&#xff08;&#xff09; A、5 B、 6 C、7 D、逻辑错误a返回的是一个暂时变量&#xff0c;这里是右值&#xff0c;不能再前面了2、以下的代码输出什么&#xff1f;&#xff08;取地址运算符比运算符的优先级要高&…