Simplifique a alternância de camadas ativadas e desativadas em um controle personalizado com caixas de seleção?
Esta questão é um subproduto daesta pergunta eu postei recentemente. Gostaria de saber se existe uma maneira melhor de verificar e ativar / desativar as camadas ao usar um controle de camadas personalizado.(Nota: Eu também tenho um botão que limpa todas as camadas, se pressionado.)
Meu controle de camadas personalizadas (L.Control.extend) fica assim:
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;
}
});
E meu JS se parece com isso (para o botão clearAll):
$("#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;
}
})
});
Para ativar / desativar a alternância de camadas:
$(".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...
}
});
Mas, um pôster sobre essa questão vinculada acima sugeria:
"você poderia ter feito isso um pouco mais simples, lendo a propriedade marcada na alteração de entrada e remova / adicione a camada de acordo, em vez de testar a presença da camada no mapa. Com seu método, você pode terminar com caixas de seleção fora de sincronia ( assinalado enquanto a camada é removida do mapa e vice-versa). "
Alguém tem alguma dica de como eu poderia ter feito isso de uma maneira mais eficiente?