(ESRI) ReferenceError: Locator is not defined - Even though it is included

(ESRI) ReferenceError: Locator is not defined - Even though it is included

我不知道为什么会收到 "not defined" 错误。我是 calling/including 所需的依赖项。下面是我正在使用的代码:

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

为什么会这样?

简答: 使用完整的模块名称:

locator = new esri.tasks.Locator("http://geocode.arcgis.com/arcgis/rest/services/World/GeocodeServer");

长答案:

您正在使用 Dojo 的遗留同步模块加载 (dojo.require),而不是较新的 asynchronous module definition (AMD) 加载 (require)。当你使用遗留加载时,你必须在使用 class.

时提供完整的模块名称

默认情况下,ArcGIS API for JavaScript 文档显示 AMD 文档,因为 AMD 更新更快,但每个 class 的顶部都有一个 link切换到旧模块加载的页面。例如:

esri.tasks.Locator (AMD)

该页面顶部有一个 link,上面写着 Legacy Module Require。点击它,你会得到这个:

esri.tasks.Locator (legacy)

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

顺便说一下,如果可以的话,我建议你换成AMD加载,特别是如果这是一个新项目。但是,如果您只是想让它正常工作,请将 Locator 更改为 esri.tasks.Locator,一切就绪。