Vereinfachen Sie das Ein- und Ausschalten von Ebenen in einem benutzerdefinierten Steuerelement mit Kontrollkästchen?

Diese Frage ist ein Ableger vondiese Frage habe ich kürzlich gepostet. Ich frage mich, ob es eine bessere Möglichkeit gibt, Ebenen zu aktivieren / deaktivieren, wenn Sie ein benutzerdefiniertes Ebenensteuerelement verwenden. (Hinweis: Ich habe auch eine Schaltfläche, mit der alle Ebenen gelöscht werden, wenn sie gedrückt werden.)

Meine benutzerdefinierte Ebenensteuerung (L.Control.extend) sieht folgendermaßen aus:

var overlaysMenuCtrl = L.Control.extend({
    onAdd: function(map){
        var container = L.DomUtil.create('div', 'legend');
        container.innerHTML = 
'<input type="checkbox" id="airfields" class="check">Airfields
<input type="checkbox" id="docks" class="check">Docks
... and so on ...
<button id="clearAll">Clear All Layers</button>';
return container;
 }
});

Und mein JS sieht so aus (für die clearAll-Schaltfläche):

$("#clearAll").click(function(event) {
 event.preventDefault();

$(".check").each(function(i, el) {
if (el.checked) {
  // Trigger the event.
  $(el).change();
  // Untick the checkbox.
  el.checked = false;
}
})
});

Für das Umschalten der Ebenen aus / ein:

$(".check").change(function(){
var layerClicked = $(this).attr("id");
    switch(layerClicked){
        case "airfields":
            if (map.haslayer(airfields)){
                 map.removeLayer(airfields);
            } else {
                  map.addLayer(airfields);
            }
         break;
       // ...and so on...
     }
  });

Aber ein Poster zu dieser Frage oben schlug vor:

"Sie hätten es etwas einfacher machen können, wenn Sie die Eigenschaft checked bei Eingabeänderung gelesen und den Layer entsprechend entfernt / hinzugefügt hätten, anstatt das Vorhandensein des Layers auf der Karte zu testen. Bei Ihrer Methode könnten die Kontrollkästchen nicht synchron sein (angekreuzt, während der Layer von der Karte entfernt wird und umgekehrt). "

Hat jemand Tipps, wie ich das effizienter hätte machen können?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage