附录:关于Dojo的基本知识
ArcGIS API for JavaScript 是基于Dojo开发的, Dojo包括按钮、格网、树、图表和其他的界面组件,并主要由3部分组成:
(1)Core-核心包;
(2)Dijit-主题界面组件;
(3)DojoX-各种扩展组件,如图表等。
ArcGIS API for JavaScript 完全支持利用异步模块定义(Asynchronous Module Definition,AMD)风格的代码创建JavaScript 对象和模块。由于使用Dojo对Javascript的部分能力进行了封装,因此,要理解其原理,必须理解以下几个Dojo命令,这都属于Dojo的core部分,由于Dojo也在不断发展,需注意现行版本与以前的区别。
(1)dojo.require: 类似 <script> 标签,用于从特定包中导入JS脚本到当前脚本页。
...
// legacy
dojo.require("esri.map");
// AMD
require(["esri/map", ... ], function(Map, ... ){ ... });
...
因此,如果在后续脚本中用到API的对象或方法等,都应用require先申明一下,如:
....
require([
"esri/map",
"esri/tasks/GeometryService",
"esri/layers/ArcGISTiledMapServiceLayer",
"esri/layers/FeatureLayer",
"esri/Color",
"esri/symbols/SimpleMarkerSymbol",
"esri/symbols/SimpleLineSymbol",
"esri/dijit/editing/Editor",
"esri/dijit/editing/TemplatePicker",
"esri/config",
"dojo/i18n!esri/nls/jsapi",
"dojo/_base/array", "dojo/parser", "dojo/keys",
"dijit/layout/BorderContainer", "dijit/layout/ContentPane",
"dojo/domReady!"
], function(
Map, GeometryService,
ArcGISTiledMapServiceLayer, FeatureLayer,
Color, SimpleMarkerSymbol, SimpleLineSymbol,
Editor, TemplatePicker,
esriConfig, jsapiBundle,
arrayUtils, parser, keys
) {
//代码区
});
(2)dojo.ready (or dojo.addOnLoad): 类似 <body οnlοad="">标签. 它帮助注册页面加载时初始化的脚本模块。
...
// legacy
dojo.ready(init);
// AMD
require(["dojo/ready"], function(ready){
ready(function(){
// This function won't run until the DOM has loaded and other modules that register have run.
});
});
...
(3)dojo.connect: 类似DOM组件的JavaScript 函数Element.addEventListener和Element.attachEvent。 主要用于登记页面中或页面特定组件的事件、消息处理函数。
...
// legacy
dojo.connect(myMap, "onLoad", myLoadHandler);
// AMD
require(["esri/map", "dojo/on"], function(Map, on) {
// ...
on(myMap, "load", callback);
});
...
(4)dojo.byId: 类似 JavaScript 函数document.getElementById(id),主要用于通过id获得页面中对象id
...
dojo.byId("myInputField").value = myMap.id;
...