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里边。

posted @ 2009-12-29 17:00  洛可可  阅读(303)  评论(0编辑  收藏  举报