我知道为什么我得到了"未定义的"错误。我根据需要调用/包含依赖项。以下是我使用的代码:
dojo.require("esri.map");
dojo.require("esri.tasks.locator");
dojo.require("esri.dijit.Geocoder");
.
.
.
var locator;
.
.
.
// this line is throwing error
locator = new Locator("http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer");
在浏览器控制台中,将显示以下消息:
ReferenceError: Locator is not defined
为什么会这样?
答案 0 :(得分:1)
简答:使用完整的模块名称:
locator = new esri.tasks.Locator("http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer");
答案很长:
您正在使用Dojo的旧版同步模块加载(dojo.require
)而不是较新的asynchronous module definition (AMD)加载(require
)。使用旧版加载时,必须在使用类时提供完整的模块名称。
默认情况下,ArcGIS API for JavaScript文档显示AMD文档,因为AMD更新更快,但每个类在页面顶部都有一个链接以切换到传统模块加载。例如:
该页面顶部有一个链接显示Legacy Module Require
。点击它就可以得到:
该页面告诉您如何使用遗留加载定位器,包括在调用构造函数时需要说esri.tasks.Locator
而不是Locator
。
顺便说一下,如果您能够,我建议您更改为AMD加载,特别是如果这是针对新项目的话。但是,如果您只想让它发挥作用,请将Locator
更改为esri.tasks.Locator
并完成所有设置。