(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切换到旧模块加载的页面。例如:
该页面顶部有一个 link,上面写着 Legacy Module Require
。点击它,你会得到这个:
该页面告诉您如何将 Locator 用于遗留加载,包括在调用构造函数时需要说 esri.tasks.Locator
而不仅仅是 Locator
。
顺便说一下,如果可以的话,我建议你换成AMD加载,特别是如果这是一个新项目。但是,如果您只是想让它正常工作,请将 Locator
更改为 esri.tasks.Locator
,一切就绪。
我不知道为什么会收到 "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切换到旧模块加载的页面。例如:
该页面顶部有一个 link,上面写着 Legacy Module Require
。点击它,你会得到这个:
该页面告诉您如何将 Locator 用于遗留加载,包括在调用构造函数时需要说 esri.tasks.Locator
而不仅仅是 Locator
。
顺便说一下,如果可以的话,我建议你换成AMD加载,特别是如果这是一个新项目。但是,如果您只是想让它正常工作,请将 Locator
更改为 esri.tasks.Locator
,一切就绪。