dojo.require 语句未按预期加载 esri Map 模块
Posted
技术标签:
【中文标题】dojo.require 语句未按预期加载 esri Map 模块【英文标题】:dojo.require statement is not loading esri Map module as expected 【发布时间】:2015-06-16 10:24:18 【问题描述】:我正在开发一个使用“arcgis”API 加载地图的 php 应用程序。请在下面找到网址:
http://js.arcgis.com/3.11/
为了在我的应用程序中加载 arcgis 地图,我必须使用
dojo.require("esri.map");
所以在我的单页 PHP 应用程序中,我添加了如下的 require 语句:
<script type="text/javascript">
dojo.require("esri.map");
</script>
并且在我给的一个js文件中加载了如下图:
var myOptions =
maxZoom: 20,
minZoom: 3,
zoom:5,
isZoomSlider: false,
sliderStyle: "large",
sliderPosition: "top-right"
;
this.map = new esri.Map("mapDiv", myOptions);
但是当我运行这个应用程序时,我在“this.map = new esri.Map("mapDiv", myOptions);”这一行收到一条错误消息“Uncaught TypeError: undefined is not a function”
如果我打开开发人员工具,通过在 require 和 esri.Map 语句处保留断点来运行相同的代码,我可以看到地图正在加载。但是,如果我在不打开开发人员工具的情况下运行它,那么我将面临这个问题。
为什么 dojo.require 语句没有按预期工作? 我在做什么错?? 请回复
【问题讨论】:
【参考方案1】:您正在尝试使用旧模块要求加载地图模块。尝试使用 AMD 语法的 require Map,如 docs 所示:
require(["esri/map"], function(Map) /* code goes here */ );
【讨论】:
我也试过了这段代码在一个视图中。所以我做了下面的 在视图中,我使用了以下代码: this.map = new mapAssign ("mapDiv", myOptions);在这样做时,我遇到了同样的问题,因为 require 函数没有首先命中。相反,地图初始化首先击中。 我制作了一个sample,带有主干视图和您可以查看的 esri 地图。我建议您了解有关 AMD 的更多信息here【参考方案2】:您需要将 JavaScript 代码封装在对 dojo.ready
的调用中。
html 文件:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
<title>JavaScript in Separate File</title>
<link rel="stylesheet" href="http://js.arcgis.com/3.11/dijit/themes/claro/claro.css">
<link rel="stylesheet" href="http://js.arcgis.com/3.11/esri/css/esri.css">
<style>
html, body height: 100%; width: 100%; margin: 0; padding: 0;
#mapDivpadding:0;
</style>
<script>var dojoConfig = parseOnLoad: true;</script>
<script src="//js.arcgis.com/3.11/"></script>
<script src="code.js"></script>
<script>
dojo.require("esri.map");
dojo.require("esri.layers.agstiled");
</script>
</head>
<body class="claro" >
<div id="mapDiv"></div>
</body>
</html>
code.js 文件:
dojo.ready(function()
var myOptions =
maxZoom: 20,
minZoom: 3,
zoom:5,
isZoomSlider: false,
sliderStyle: "large",
sliderPosition: "top-right"
;
this.map = new esri.Map("mapDiv", myOptions);
var layer = new esri.layers.ArcGISTiledMapServiceLayer(
"http://services.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer");
this.map.addLayer(layer);
);
【讨论】:
以上是关于dojo.require 语句未按预期加载 esri Map 模块的主要内容,如果未能解决你的问题,请参考以下文章
Hue 上的 Apache Pig 0.12.0 未按预期预处理语句