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命令]

2.1 从这里开始不同——命令相关推荐

  1. Kubectl 常用命令, 开发人员常用k8s命令

    Kubectl 常用命令: 什么是常用,我用的,就是常用的

  2. ECS(Linux)连接RDS,使用命令行方式连接实例

    使用命令行方式连接实例 通过命令行连接RDS MySQL数据库,连接方式如下: mysql -h<连接地址> -P<端口> -u<用户名> -p -D<数据库 ...

  3. 设置普通用户执行docker命令,执行docker命令无需输入密码或者切换root用户

    每次执行docker命令都要输入密码或者切换root用户,非常不方便,尤其是在shell脚本中就更麻烦了,一起来解决这个问题: 1. 创建名为docker的组,如果之前已经有该组就会提示已存在: su ...

  4. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

  5. 作为一个java程序员,常用的linux命令(越攒越多)

    本篇记录我在工作中不断遇到的常用的linux命令,并进行总结,时常更新! 1. 升级服务时先停止服务,然后进行替换 linux中杀进程时候,如果你是知道它所占用的端口号的话,可以通过 netstat ...

  6. docker上你必须会的那些命令

    一.基础类 查看docker信息 # 查看docker版本 docker version # 显示docker系统的信息 docker info # 日志信息 docker logs # 故障检查 s ...

  7. 基于Golang的CLI 命令行程序开发

    基于Golang的CLI 命令行程序开发 [阅读时间:约15分钟] 一. CLI 命令行程序概述 二. 系统环境&项目介绍&开发准备 1.系统环境 2.项目介绍 3.开发准备 三.具体 ...

  8. 简单解决用VS编写hello world时命令行一闪而过

    一.在return 0;前一行加一个getchar(); 二.使用项目模板为 windows 桌面向导 c++ 3.命令行控制台一闪而过.这是我们使用空文件夹加载的项目,默认不是控制台应用程序,新建控 ...

  9. docker常用命令详解

    docker常用命令详解 本文只记录docker命令在大部分情境下的使用,如果想了解每一个选项的细节,请参考官方文档,这里只作为自己以后的备忘记录下来. 根据自己的理解,总的来说分为以下几种: Doc ...

  10. 进入Docker容器命令

    进入Docker容器命令 docker执行命令: docker exec -it [容器ID或者容器名称] /bin/bash 如果出现下述问题: OCI runtime exec failed: e ...

最新文章

  1. android高仿微信拍照、多选、预览、删除(去除相片)相冊功能
  2. JSP文件管理后门工具jsp-file-browser
  3. php从入门到精通19天笔记,传智播客-PHP从入门到精通(19天)-video
  4. 冒泡排序出现的问题_停课不停学 | 有趣的算法——冒泡排序
  5. Android 浏览器的研究(四)--- Apk的启动和主页的加载过程
  6. MyBatisPlus中进行通用CRUD全局策略配置
  7. Bert/Transformer汇总
  8. “视频云营业厅”发布,蚂蚁 mPaaS 加速金融机构数字化转型
  9. l2-008 最长对称子串 (25分)_小学数学关于时间认识(时、分、秒)的几点总结
  10. python import 错误 TypeError: 'module' object is not callable
  11. 简述与oracle相关的程序组,北语网院18秋《Oracle数据库开发》作业_4答案
  12. word2010添加b5纸张大小_【仁美文化】散文:薄如纸张
  13. Running pip as root will break packages and permissions. You should install packages reliably by usi
  14. 对给定数组升或降排序
  15. 尔雅网课鼠标移出停止播放解决办法
  16. java系统过载保护_过载保护之常见过载处理
  17. Apache配置反向代理
  18. MATLAB图像如何显示希腊字母、上下标(alpha、beta等)
  19. NLP系列笔记:通俗理解LDA主题模型
  20. PyCharm使用手册

热门文章

  1. ChatGPT的调教指令大全
  2. swift 听筒模式_Swift中的存储库模式
  3. 学习笔记----如何从零打造一个手游客户端
  4. 手游客户端架构设计思路
  5. TD联合Modelsim进行功能仿真
  6. 史上最全的Python电子书教程资源下载(转)
  7. GDI与DirectDraw之间的区别
  8. 恢复被修改乱七八糟的外国源镜像
  9. 阿里云,腾讯云,UCloud ,华为云云主机对比测评:UCloud快杰云主机脱颖而出
  10. 密码复杂度正则表达式