Mehr

Das Kontrollkästchen wird deaktiviert, wenn die Karte verschoben wird

Das Kontrollkästchen wird deaktiviert, wenn die Karte verschoben wird


Ich habe ein Inhaltsverzeichnis, das verwendet wird, um die Sichtbarkeit von Ebenen umzuschalten. Ich habe auch ein Dialogfeld, das die sichtbaren Ebenen auffüllt, sodass der Benutzer aus den sichtbaren Ebenen auswählen kann, auf welcher Ebene sie sich identifizieren möchten. Dazu verwenden sie ein Kontrollkästchen. Wenn die Karte jedoch geschwenkt oder auf ein Feature gezoomt wird, wird das Kontrollkästchen deaktiviert. hier ist ein Screenshot.

Hier ist der Code, den ich zum Erstellen des Kontrollkästchens für die sichtbare Ebene verwende:

function buildLayerList() { require(["dojo/on", "dojo/dom", "dojo/_base/array"], function (on, dom, arrayUtils) { var mapLayer = map.layerIds; var myItems = [] ; arrayUtils.map(mapLayer, function (layerName) { var myLayer = map.getLayer(layerName); if (myLayer.id !== "NAIP2012" && myLayer.id !== "NAIP2009" && myLayer.id !== "NAIP2006" && myLayer.id !== "trLayer" && myLayer.id !== "SEO-Quellen nach tatsächlichem Ertrag beschriften" && myLayer.id !== "SEO-Quellen nach MWBZ-Top beschriften") { if (myLayer.visibleLayers ) { //console.log(myLayer.id + " : " + "hat vis Layers"); var items = arrayUtils.map(myLayer.layerInfos, function (info, index) { if (info.name === " SEO-Quellen nach Tiefe beschriften" || info.name === "SEO-Quellen nach tatsächlichem Ertrag beschriften" || info.name === "SEO-Quellen nach MWBZ-Top beschriften") { // console.log(info.name) ; } else { if (myLayer.visibleLayers.indexOf(info.id) > -1) { return "
"; } } }); myItems = myItems.concat(items); } } }); var ll = dom.byId("legendDiv"); ll.innerHTML = myItems.join("); document.getElementById("legendDiv").style.display = "block"; }); }

Gemäß der Dokumentation für das Layer-Ereignis "update-end" wird es jedes Mal ausgelöst, wenn die Aktualisierung des Layers abgeschlossen ist. Jedes Mal, wenn der Benutzer schwenkt, hinein- oder herauszoomt, wird dieses Ereignis ausgelöst.

Das Problem besteht darin, dass sich die LayerInfo.defaultVisibility, die Sie zum Definieren des Kontrollkästchenstatus verwenden, nicht ändert, wenn Sie die Sichtbarkeit des Layers ändern. Es wird nur angezeigt, ob der Kartendienst es anfänglich aktiviert hatte. Wenn Sie schwenken oder zoomen, wird das Kontrollkästchen neu gerendert und das Kontrollkästchen wird auf den ursprünglichen Kartenstatus zurückgesetzt.

Wenn Sie das Layer-Update-End-Ereignis weiterhin verwenden, um die Kontrollkästchen zu aktualisieren, müssen Sie auf andere Weise speichern, ob das Kontrollkästchen aktiviert ist oder nicht.


Lösung:

in map.js haben wir alle ersetzt

myLayer.on('update-end', buildLayerList); with on(map, "update-end", buildLayerList);

Dann haben wir im obigen Code ein Array erstellt, das die Checkbox-ID aufrief, wenn sie überprüft wurde, dann wurde nichts getan.

function buildLayerList() { require(["dojo/on", "dojo/dom", "dijit/form/CheckBox", "dojo/_base/array"], function (on, dom, CheckBox, arrayUtils) { var mapLayer = map.layerIds; var myItems = []; var selectedLayers = []; arrayUtils.map(mapLayer, function (layerName) { var myLayer = map.getLayer(layerName); if (myLayer.id !== "basinLayer" && myLayer.id !== "NAIP2012" && myLayer.id !== "NAIP2009" && myLayer.id !== "NAIP2006" && myLayer.id !== "trLayer" && myLayer.id !== "Label SEO wells nach tatsächlichem Ertrag" && myLayer.id !== "SEO-Wells nach MWBZ top beschriften") { if (myLayer.visibleLayers) { var items = arrayUtils.map(myLayer.layerInfos, function (info, index) { if (document. getElementById(info.name + "CB")) { if (document.getElementById(info.name + "CB").checked) { selectedLayers.push(info.name); } } }); } } }); arrayUtils .map(mapLayer, function (layerName2) { var myLayer2 = map.getLayer(layerName2); if (myLayer2.id !== "basinLayer" && myLayer2.id !== "NAIP2012" && myLayer2.id !== "NAIP2009 " && meinL ayer2.id !== "NAIP2006" && myLayer2.id !== "trLayer" && myLayer2.id !== "SEO-Quellen nach tatsächlichem Ertrag beschriften" && myLayer2.id !== "SEO-Quellen nach MWBZ nach oben beschriften") { if (myLayer2.visibleLayers) { var items = arrayUtils.map(myLayer2.layerInfos, function (info, index) { if (info.name === "SEO-Wells nach Tiefe beschriften" || info.name === "SEO-Brunnen nach tatsächlichem Ertrag beschriften" || info.name === "Label SEO wells by MWBZ top") { } else { if (myLayer2.visibleLayers.indexOf(info.id) > -1) { var layerWasSelected ="; arrayUtils.map(selectedLayers, function (selectedLayerName .) ) { if (selectedLayerName === info.name) { layerWasSelected = 'checked'; } } ); return "
"; } } }); myItems = myItems.concat(items); } } }); var legendList = dom.byId("legendDiv"); legendList.innerHTML = myItems.join("); document.getElementById("legendDiv").style.display = "block"; document.getElementById("blTree").style.display = "block"; });

}