Solved! Go to Solution.
require([ "esri/map", "esri/layers/FeatureLayer", "esri/dijit/Legend","esri/dijit/BasemapGallery", "esri/arcgis/utils", "dojo/_base/array", "dojo/parser", "esri/dijit/LocateButton", "esri/dijit/HomeButton", "esri/dijit/OverviewMap", "esri/layers/ArcGISDynamicMapServiceLayer", "dijit/layout/BorderContainer", "dijit/layout/ContentPane", "dijit/TitlePane","dijit/layout/AccordionContainer", "dojo/domReady!" ], function( Map, FeatureLayer, Legend,BasemapGallery, arcgisUtils, arrayUtils, parser , LocateButton, HomeButton, OverviewMap, ArcGISDynamicMapServiceLayer )
I have a similar question to all of this. i have several table of contents that are grouped by types of data. The client wants a separate legend that they can open and see a list of layers that are checked in the other TOCs and be able to check the layers in the new TOC for identifying. Here is a screenshot of what i have so far:
The bottom left is the new TOC that i want to just list visible layers that are turned on elsewhere. Thanks!
p.s. i know its redundant but that's what they want!
map.on("layers-add-result", function (evt) {
buildLayerList(evt)
});
function buildLayerList(evt) {
array.forEach(evt.layers, function (layer) {
var vis = [];
visible.push(vis);
buildCheckboxes(layer);
});
}
function buildCheckboxes(layer) {
array.forEach(layer.layer.layerInfos, function (info, index) {
var checkBox = new CheckBox({
name: "checkBox" + layer.layer.id + info.id,
value: layer.layer.id + "_" + info.id,
checked: info.defaultVisibility,
onChange: function (evt) {
var thisArray = this.value.split("_")
var layerID = thisArray[0];
var infoID = parseInt(thisArray[1]);
var clayer = map.getLayer(thisArray[0]);
var visArray = clayer.visibleLayers;
var ind = visArray.indexOf(infoID);
if (ind > -1) {
visArray.splice(ind, 1);
}
else {
visArray.push(infoID);
}
if (visArray.length == 0) { visArray.push(-1);}
clayer.setVisibleLayers(visArray);
}
});
layers = dojo.queryToObject(URLparams).layers;
layerList = (layers) ? layers.split(',') : [];
for (a in layerList ) {
layerList = parseInt(layerList);
}
if (layer.loaded) {
buildLayerList(layer);
} else {
dojo.connect(layer, "onLoad", buildLayerList);
}