(ESRI)ReferenceError:未定义定位器 - 即使它包含在内

时间:2015-07-30 10:33:08

标签: javascript arcgis esri arcgis-js-api

我知道为什么我得到了"未定义的"错误。我根据需要调用/包含依赖项。以下是我使用的代码:

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

为什么会这样?

1 个答案:

答案 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更新更快,但每个类在页面顶部都有一个链接以切换到传统模块加载。例如:

esri.tasks.Locator (AMD)

该页面顶部有一个链接显示Legacy Module Require。点击它就可以得到:

esri.tasks.Locator (legacy)

该页面告诉您如何使用遗留加载定位器,包括在调用构造函数时需要说esri.tasks.Locator而不是Locator

顺便说一下,如果您能够,我建议您更改为AMD加载,特别是如果这是针对新项目的话。但是,如果您只想让它发挥作用,请将Locator更改为esri.tasks.Locator并完成所有设置。