Leaflet: e.layer не работает с L.Marker или esri.featurelayer?
У меня есть слой центральных точек, полученных из полигонов через событие OnEachFeature.
Первая часть поведения, которое я ищу, заключается в том, что полигон, связанный с этой центральной точкой, меняет стиль при щелчке, что мне удалось.
var ProjectMap = L.esri.featureLayer ({
url: 'https://services.arcgis.com/2gdL2gxYNFY2TOUb/arcgis/rest/services/NECSC_Test_Data/FeatureServer/1',
//making the polygons invisible
weight: 0,
fillOpacity: 0,
onEachFeature: function(feature,layer){
if (feature.geometry.type = 'Polygon') {
var bounds = layer.getBounds();
var center = bounds.getCenter();
var centerpoints = L.marker(center);
centerpointlayer.addLayer(centerpoints);
centerpoints.on('click', function(e) {
map.fitBounds(bounds);
layer.setStyle({
fillOpacity: 0.5,
});
info.update(layer.feature.properties);
});
};
}
}).addTo(map);
Вторая часть поведения, которое я хочу, заключается в том, чтобы любой ранее выбранный многоугольник сбрасывал свой стиль при нажатии другой центральной точки. Я не могу заставить это работать, используя e.target и e.layer и метод resetStyle GeoJSON, как предложено во многих других потоках здесь.
[...]
var selected
centerpoints.on('click', function(e) {
if (selected){
e.target.resetStyle(selected)
}
selected = e.layer
map.fitBounds(bounds);
selected.setStyle({
fillOpacity: 0.5,
});
info.update(layer.feature.properties);
});
Консоль выдает ошибку у меня, в selected.setStyle({ of
'Uncaught TypeError: Cannot read property 'setStyle' of undefined' at e.<anonymous> ((index):178)
at e.fire (leaflet.js:5)
at e._fireDOMEvent (leaflet.js:5)
at e._handleDOMEvent (leaflet.js:5)
at HTMLDivElement.r (leaflet.js:5)
Я немного озадачен тем, что происходит с Leaflet здесь - есть ли другой способ заставить esri.feature.layer вернуться к своему стилю по умолчанию, затем изменить стиль выбранной комбинации centerpoint-polygon по клику?
1 ответ
Я считаю, что вам нужно слушать событие нажатия на слое, а не маркеры.
centerpointlayer.on('click', function(e) {
if (selected){
e.target.resetStyle(selected)
}
selected = e.layer
map.fitBounds(bounds);
selected.setStyle({
fillOpacity: 0.5,
});
info.update(layer.feature.properties);
});