我收到了这个错误:
TypeError:'undefined'不是函数(评估'parser.parse()')
这是我的代码。
<script>
require([
"esri/map",
"esri/layers/FeatureLayer",
"esri/dijit/Legend",
"esri/digit/HomeButton",
"dojo/_base/array",
"dojo/parser",
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane",
"dijit/layout/AccordionContainer",
"dojo/domReady!"
], function(
Map, FeatureLayer, Legend, arrayUtils, parser, HomeButton
) {
parser.parse();
var map = new Map("map", {
basemap: "streets",
center: [-87.702733, 41.998508],
zoom: 15
});
var home = new HomeButton ({
map: map
}, "HomeButton");
home.startup();
var circuits = new FeatureLayer("http://54.243.188.50:6080/arcgis/rest/services/TYLIN/Streetlights_Pilot/MapServer/6", {
mode: FeatureLayer.MODE_ONDEMAND,
outFields:["*"]
});
var power = new FeatureLayer("http://54.243.188.50:6080/arcgis/rest/services/TYLIN/Streetlights_Pilot/MapServer/2", {
mode: FeatureLayer.MODE_ONDEMAND,
outFields:["*"]
});
//add the legend
map.on("layers-add-result", function (evt) {
var layerInfo = arrayUtils.map(evt.layers, function (layer, index) {
return {layer:layer.layer, title:layer.layer.name};
});
if (layerInfo.length > 0) {
var legendDijit = new Legend({
map: map,
layerInfos: layerInfo
}, "legendDiv");
legendDijit.startup();
}
});
map.addLayers([circuits, power]);
});
</script>
我已经能够通过拆分与Legend部分分开的HomeButton部分来运行它。在后来,我必须调用dojo.parser.parse() - 但这不适用于Legend部分。
我真的不明白dojo / parser是如何工作的,因此我很难理解为什么某些部分需要dojo.parser.parse()而其他部分需要parser.parse()。
答案 0 :(得分:6)
require()
存在问题。 dojo/parser
是您导入的第6个模块,但是,名为parser
的参数位于第5位,因此它们不匹配。您导入的模块的顺序必须与您使用它们的参数相同,所以这是正确的方法:
require([
"esri/map",
"esri/layers/FeatureLayer",
"esri/dijit/Legend",
"esri/digit/HomeButton",
"dojo/_base/array",
"dojo/parser",
"dijit/layout/BorderContainer",
"dijit/layout/ContentPane",
"dijit/layout/AccordionContainer",
"dojo/domReady!"
], function(
Map, FeatureLayer, Legend, HomeButton, arrayUtils, parser
) {
如您所见,我将HomeButton切换到另一个地方,现在模块与参数匹配。
esri/map
(第1单元):Map
(功能中的第1个变量)esri/layers/FeatureLayer
(第2单元):FeatureLayer
(第2个参数)esri/dijit/Legend
(第3单元):Legend
(第3个参数)esri/dijit/HomeButton
(第4单元):HomeButton
(第4个参数)dojo/_base/array
(第5单元):arrayUtils
(第5个参数)dojo/parser
(第6个模块):parser
(第6个参数)如果您将代码分开,代码的工作原因是因为您可能修复了require()
。 dojo.parser.parse()
之所以有效,是因为它旧的弃用旧代码不使用require
回调的参数。