¿Forma correcta de determinar el tipo de capa de folleto?


8

¿Cuál es el enfoque correcto (o recomendado) para identificar un "tipo" de capa en Leaflet / Javascript?

Puedo usarlo con éxito layer instanceof, pero eso solo funciona cuando conoces el tipo en el momento del diseño (lo cual espero que sea el caso).

map.eachLayer(function(layer) {
    console.log('_leaflet_id=' + layer._leaflet_id + ' is layer type= '+ getLayerTypeName(layer));

function getLayerTypeName(layer)
{
    if (layer instanceof L.Marker){
        return 'Marker';
    }
    else if (layer instanceof L.Tooltip){
        return 'Tooltip';
    }
    else if (layer instanceof L.esri.DynamicMapLayer){
        return 'DynamicMapLayer';
    }
    else if (layer instanceof L.esri.BasemapLayer){
        return 'BasemapLayer';
    }   
    else if (layer instanceof L.Layer){
        return 'Layer';
    }        
    else
    {
        return 'Unknown';
    }
}

¿Hay un enfoque diferente que debería estar usando?

https://jsfiddle.net/CumminsJP/tb28qwpo/

Respuestas:


2

Esto no es realmente un problema de folleto, sino general con Javascript. Y se refiere específicamente a cuándo quieres el nombre de los objetos. Para las comparaciones, hay muchas maneras de hacerlo de manera segura (como en su ejemplo).

Javascript no tiene clases, por lo que solo puede confiar realmente en

layer.constructor.name

Sin embargo, si usa código minificado, los nombres de los constructores a menudo cambian (ya que también se minifican), por lo que no serán legibles.

Algunas bibliotecas agregan los nombres de los objetos como propiedades (el folleto no), pero rara vez los necesita como texto.

Vea https://stackoverflow.com/a/1249554 para una discusión más detallada.

Tenga en cuenta que nunca debe usar estos nombres para nada en su código (comparación / identificación) excepto la salida directa (depuración), ya que no son confiables.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.