2.1 从这里开始不同——命令

来源:互联网 发布:ps cs6软件下载 编辑:程序博客网 时间:2024/06/06 09:18

2.1       从这里开始不同——命令

既然我们要受到这么多的限制,那么我们如何才能让MapGuide完成一些我需要的功能呢?在基本网页布局中,如果要想扩充已有功能,你就要用到一个很神奇的东西——命令。

那么,什么是命令呢?简单地说,我们可以认为,命令就是被封装在一个函数中的一段脚本(通常是Javascript脚本)。我们可以根据实际需要把命令加入到工具栏、任务窗格或者上下文菜单中。当我们点击了工具栏上的一个图标,或者选择了任务列表或上下文菜单中的一项,我们的网页就会执行这一段我们编写的脚本,从而完成我们要做的工作。至于命令具体是放在工具栏、任务窗格还是上下文菜单中的哪个位置上,完全是由定义网页布局的人来决定的,网页布局对此并没有什么机制来进行限制。只要用户喜欢,甚至可以把同一条命令,既放在工具栏上,也放置在任务列表中和上下文菜单中。

因此,如果您是命令的开发者,请保证它可以放置在这三个位置中的任何一个,否则定义网页布局的人有可能会把它放置在您不想它出现的位置上。

2.1.1          不要重复发明轮子——内置命令

基本网页布局已经为我们实现了很多内置命令,比如缩放、选择等等,我们可以直接使用这些命令。限于篇幅,这里不再一一介绍每个命令的功能,您可以通过网页中的Help命令来查看阅读器的帮助文档,在里面有详细的关于各项内置命令的功能解释。

下面我们用一个例子来介绍如何在基本网页布局中使用内置命令。

(在使用本章的所有示例之前,请先从MapGuide项目的主页去下载用于MapGuide 2.0.X的示例资源包并加载到MapGuide中。本书编写时,该资源包的下载地址是http://download.osgeo.org/mapguide/releases/2.0.0/samples/Sheboygan.mgp。如果加载成功,您将会在MapGuide资源库的Library://Samples下面看到一个名为Sheboygan文件夹,里面放置着本章例子中需要引用到的资源文件)。

首先,请看这样一个网页布局:

 

2-2 内置命令使用示例

这个例子使用的是Library://Samples/Sheboygan/Maps/Sheboygan.MapDefinition作为地图,为了突出重点,该例子去掉了无关的部分,仅保留了工具栏和上下文菜单。在这个网页布局中,只有两个命令,一个采用的是内置的打印命令(Get Printable Page),一个采用的是内置的平移命令(Pan)。但是这两个命令都经过定制,其显示的文本是中文的。两条命令都既放置在工具栏中,又放置在上下文菜单中。

那么,这样的网页布局,它的配置文件应该是什么样子的呢?

代码2-1中给出的是该网页布局的配置文件中的一部分。限于篇幅,我们这里只给出了关键部分,其余省略的部分用省略号表示。

<ToolBar>

    <Visible>true</Visible>

    <Button xsi:type="CommandItemType">

      <Function>Command</Function>

      <Command>MyPrint</Command>

    </Button>

    <Button xsi:type="CommandItemType">

      <Function>Command</Function>

      <Command>MyPan</Command>

    </Button>

  </ToolBar>

 

  <ContextMenu>

    <Visible>true</Visible>

    <MenuItem xsi:type="CommandItemType">

      <Function>Command</Function>

      <Command>MyPrint</Command>

    </MenuItem>

    <MenuItem xsi:type="CommandItemType">

      <Function>Command</Function>

      <Command>MyPan</Command>

    </MenuItem>

  </ContextMenu>

  <CommandSet>

    <Command xsi:type="BasicCommandType">

      <Name>MyPan</Name>

      <Label>平移</Label>

      <Tooltip>通过拖拽显示更多内容</Tooltip>

      <Description>Drag the map to view areas out of range</Description>

      <ImageURL>../stdicons/icon_pan.gif</ImageURL>

      <DisabledImageURL>../stdicons/icon_pan_disabled.gif</DisabledImageURL>

      <TargetViewer>All</TargetViewer>

      <Action>Pan</Action>

    </Command>

    <Command xsi:type="GetPrintablePageCommandType">

      <Name>MyPrint</Name>

      <Label>打印</Label>

      <Tooltip>打开一个可以打印的页面</Tooltip>

      <Description />

      <ImageURL>../stdicons/icon_printablepage.gif</ImageURL>

      <DisabledImageURL>../stdicons/icon_printablepage_disabled.gif</DisabledImageURL>

      <TargetViewer>Ajax</TargetViewer>

      <Target>NewWindow</Target>

    </Command>

  </CommandSet>

代码2-1 内置命令使用示例的网页布局文件的片段

需要指出的是,如果您想要配置这样的一个网页布局文件,除非您有非常特殊的需求,否则,我们不建议您采用完全用手写再上传到MapGuide的做法,而是使用相应的配置工具。这些配置工具大大简化了我们配置各种资源所需要做的工作。这些工具中比较成熟的一个就是由Autodesk开发的Autodesk MapGuide Studio。我们会在后面章节中介绍到如何利用Autodesk MapGuide Studio工具来配置各种的MapGuide服务器上的资源。

这段配置文件中值得我们注意的有两个:

一是命令的声明方式。我们可以看到,命令都声明在CommandSet部分,每一个命令都被配置在一个独立的Command节点中。每个节点都有一些类似的子节点,用于配置名称、提示文本、界面中该命令的图标和文本等。要注意的是,不同的命令,根据该命令的特点,其配置方式稍有差别。比如平移所使用的是“基本命令类型”(BasicCommandType),那么表示这个命令采用的是“平移”(Pan)命令的地方在Command下面的Action子节点。而打印命令,其使用的是专门的 “获得打印页面命令类型”(GetPrintablePageCommandType),这个类型本身就表示了命令的内置类型是“获取打印页面”(AJAX下的打印命令),因此我们就不再需要Action子节点。还有一个很有趣的地方是打印“命令”下的TargetViewer,这里的Ajax表示这个命令只能使用在AJAX阅读器下,而不能用于DWF阅读器。这个选项可以用来兼容以前含有DWF阅读器的MapGuide的版本

二是命令是如何加入到工具栏和上下文菜单等元素中的。工具栏的配置在ToolBar节点下,每个命令都是一个Button节点,Button节点的Function子节点内容是Command(用来分隔命令按钮的分割线的Function子节点内容是Separator),而Command就是相应命令的Name子节点的内容。而上下文菜单的配置在ContextMenu下面,每一个命令都是一个MenuItem节点,其余与工具栏基本相同(在任务列表中,每个命令都是一个MenuButton节点)。

虽然,MapGuide已经为我们提供了大量的内置命令。但是,这些还是远远不够的。这些命令已经规定了地图与用户的交互方式,能够满足的需求很有限。比如平移命令需要在调用后还需要用户使用鼠标将地图拖拽到需要的地方,那么有没有一个办法可以让用户可能调用一个命令后,能够将地图定位到指定的位置上,而不再需要拖拽呢?再比如目前MapGuide各个部分显示的内容是固定下来的,那么有没有一个办法能够在某个区域显示自行编写的功能更为强大的页面呢?

[To be continued by 2.1.2 广阔的天地——调用代码命令和调用URL命令]