zoukankan      html  css  js  c++  java
  • ArcGis Server ADF Toolbar与Map的客户端和服务端交互过程分析1

    1、Toolbar的初始化步骤

       [1]、Toolbar.FrameworkInitialize()
             
              在这里建立所有的Tool实例(但是未初始化完其所有属性)。
             
       [2]、Toolbar.OnLoad()
             
              在这里主要是调用了AddToolItems()方法建立Map里边的工具实例。Toolbar的工
              具类名是ToolbarItem,而Map里边的工具类名是MapToolItem,两者并不一样。
             
              AddToolItems()具体工作:
             
              (1)、取出Toolbar的所有ToolbarItem(s)
              (2)、foreach(循环)
                 {
                    1、调用callToolbarItemInitialize()对ToolbarItem进行进一步的初始化,
                    而callToolbarItemInitialize()内部又调用LoadClassFromAssembly(),其
                    实就是建立起ToolBarItem的ServerActionClass的实例,这个实例通过一
                    个Hashtable保存,让ToolbarItem名称和Object配对。
                      
                    2、以ToolbarItem为原型,建立MapToolItem实例,并添加到Map的内部工
                    具集中。
                      
                      MapToolItem有一个属性ServerToolAction,用来保存该Item对应的
                      ServerActionClass的实例。
                 }
                
        [3]、ToolbarBase.RenderContents() -> RenderRuntime()
       
             这个步骤主要用来生成工具条及工具按钮的Client HTML代码
       
                 RenderRuntime()
                 {
                    ......            
                   
                    //
                    // 调用ToolbarItem的Render()方法,让每一个ToolBarItem都产生自己
                    // 对应的方法
                    //
                    foreach (ToolbarItem item in this.ToolbarItems)
                    {
                        item.Render(this, num2, num3, false, builder);
                    }
                    ...
                 }
                
            Tool.Redner()里边有很多工作,但是最关键的是以下几行代码:
            
                Render()
                {
                    ...
                    if (!inDesignMode && !base.Disabled)
                    {
                       builder.Append(string.Format("  onMouseDown=\"ToolbarMouseDown('{0}', '{1}', 'Tool', event);\"\n", toolbar.ClientID, this.Name));
                       builder.Append(string.Format("  onMouseOver=\"ToolbarMouseOver('{0}','{1}');\"\n", toolbar.ClientID, this.Name));
                       builder.Append(string.Format("  onMouseOut=\"ToolbarMouseOut( '{0}','{1}');\"\n", toolbar.ClientID, this.Name));
                    }
                    ...
                }   
                
            这个代码的意思就是说,如果用户单击了工具条上的按钮,就执行Javascript
            函数ToolbarMouseDown()等。
            
            这个ToolbarMouseDown()出现在ESRI.ADF.UI.Toolbar.js里边。

  • 相关阅读:
    .net core入门
    编码之Base64编码
    C++ 实现十大排序算法
    C++11 智能指针
    Object Pool 对象池的C++11使用(转)
    mac pro 1.5T内存是如何实现的
    Linux C/C++开发
    mac Chrome 快捷键
    C++11多线程
    Java项目压力测试(待补)
  • 原文地址:https://www.cnblogs.com/monica/p/1635233.html
Copyright © 2011-2022 走看看