【发布时间】:2015-07-18 06:53:17
【问题描述】:
供参考,请参阅:https://developers.arcgis.com/javascript/jssamples/map_dynamiclayerlist.html
但是,与 ESRI 示例不同,我加载了几个不同的服务,每个服务都有多个层。所以我根据以下内容修改了 ESRI 代码:
var visible = [];
function buildLayerList() {
arrayUtils.forEach(map.layerIds, function (id) {
var currLayer = map.getLayer(id);
var items = arrayUtils.map(currLayer.layerInfos, function (info, index) {
if (info.defaultVisibility) {
visible.push(info.id);
}
return "<input type='checkbox' class='list_item'" + (info.defaultVisibility ? "checked=checked" : "") + "' id='" + info.id + "'' /><label for='" + info.id + "'>" + info.name + "</label>";
});
});
//more code per ESRI
}
但是,就我而言,items 变量没有获得任何值;它返回为 null 或未定义。我想那是因为我基本上有两个循环,不像 ESRI 的。
那么我该如何解决呢?我不想对图层选择菜单选项进行硬编码,但如果我想不通,可能不得不这样做。
注意:这些都是 Arcgis 动态层。
谢谢!
【问题讨论】:
-
好吧,
items被声明为.forEach回调中的局部变量。你想在哪里引用它? -
就在每个 ESRI 的 //more 代码下方——与原始 ESRI 代码一样
-
这行不通——一个局部变量被称为“local”,因为它的使用被限制在它被声明的范围内。最重要的是,您的代码会在
.forEach()的每次迭代中使用.map()调用的结果重新分配items。即使您可以访问它,它也只会包含上次迭代的结果。 -
有道理。那么该怎么办呢?
-
我不知道你的总体目标是什么。你想做什么?
标签: javascript arcgis esri arcgis-js-api