我有一个使用 ArcGIS js API和 RequireJS 的代码。
当我评估parser.parse();
这是我的代码:
require.config({
paths: {
'esri' : 'http://js.arcgis.com/3.12/esri',
'dojo' : 'http://js.arcgis.com/3.12/dojo',
'dojox' : 'http://js.arcgis.com/3.12/dojox',
'dijit' : 'http://js.arcgis.com/3.12/dijit',
'jquery' : 'http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min',
'app' : 'app'
}
});
require([
'jquery',
'dojo/parser',
'dijit/layout/BorderContainer', 'dijit/layout/ContentPane'
], function($, parser){
require(['app'], function(){
$(document).ready(function(){
parser.parse(); //IS IT PROPER PLACE FOR THIS?
var PARKI_APP = new MapApplication();
$.getJSON(PARKI_APP.CONFIG_FILE, function(json){
if (json.app) PARKI_APP.initApp(json.app);
if (json.map) PARKI_APP.initMap(json.map);
if (json.widgets) PARKI_APP.initWidgets(json.widgets);
});
});
});
});
我猜这个问题是由initMap
函数引起的,因为它异步加载其他模块。以下是initMap
函数的代码:
initMap: function(json){
var config = {
center : json.center || this.prototype.appDefaults.center,
zoom : json.zoom || this.prototype.appDefaults.zoom,
featureLayers: json.featureLayers
},
id = this.prototype.MAP_HTML_ID,
app = this;
require([
'esri/map',
'esri/tasks/GeometryService',
'esri/toolbars/edit',
'esri/layers/ArcGISTiledMapServiceLayer',
'esri/layers/FeatureLayer',
'dojo/dom',
'dijit/layout/BorderContainer', 'dijit/layout/ContentPane'
], function(
Map, GeometryService, Edit,
ArcGISTiledMapServiceLayer, FeatureLayer,
dom
) {
var map,
layers = config.featureLayers,
featureLayers = [];
//This service is for development and testing purposes only. We recommend that you create your own geometry service for use within your applications.
esriConfig.defaults.geometryService = new GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
map = new Map(id, {
basemap: "streets",
center: config.center,
zoom: config.zoom
});
var labels = new ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/Reference/World_Boundaries_and_Places/MapServer");
map.addLayer(labels);
//feautre layers
for (var i = 0, l = layers.length; i < l; i++) {
var fLayer = new FeatureLayer(layers[i].url, {
mode: FeatureLayer.MODE_ONDEMAND,
outFields: ['*']
});
featureLayers.push(fLayer);
};
map.addLayers(featureLayers);
app.setMapParams(config);
app.setMap(map);
})
},
以下是 HTML 的部分内容:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!--The viewport meta tag is used to improve the presentation and behavior of the samples
on iOS devices-->
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<link rel="stylesheet" href="http://js.arcgis.com/3.14/esri/css/esri.css">
<link rel="stylesheet" href="css/custom_style.css">
<script data-main="main.js" src="libs/require.js"></script>
</head>
<body class="claro">
<div id="main" data-dojo-type="dijit/layout/BorderContainer" data-dojo-props="design:'headline'">
<div class="panes" data-dojo-type="dijit/layout/ContentPane" id="header" data-dojo-props="region:'top'">
<p>AAA</p>
</div>
<div id="leftPanes" class="panes" data-dojo-type="dijit/layout/ContentPane" data-dojo-props="region:'left'" style="width: 210px;overflow:hidden;">
</div>
<div data-dojo-type="dijit/layout/ContentPane" id="map" data-dojo-props="region:'center'"></div>
</div>
</body>
</html>
您认为我的代码有任何问题吗?
感谢。
答案 0 :(得分:1)
我解决了我的问题。不要使用RequireJS。 当我将 ArcGIS API 附加到我的HTML文件时,我可以使用
require(['myJsFileOnLocalHost.js']);
但最后使用'.js'
,就像我写的那样here