Всплывающие окна слоя предотвращаются дополнительным кодом в onEachFeature - PullRequest
0 голосов
/ 03 февраля 2019

Работая в буклете-0.7.3, я создал собственные всплывающие окна, используя свойства данных geoJson, используя layer.bindPopup в onEachFeature.Однако я также пытаюсь использовать layer._leaflet_id = feature.properties.fid в onEachFeature, чтобы использовать функцию для перемещения между функциями с помощью внешнего управления.

Эта функция (clickOnMapItem в приведенном ниже фрагменте кода) работаети я собираюсь использовать его с кнопками NEXT и PREVIOUS вне карты.

Однако после включения layer._leaflet_id = feature.properties.fid в onEachFeature всплывающие окна больше не появляются.Как я могу успешно выполнить обе задачи внутри onEachFeature?

Ниже приведен фрагмент кода.

function onEachFeature(feature, layer) {
layer.bindPopup('<b>Location: </b>' + feature.properties.name);
layer.on({
click: getName
});
//including this next line seems to prevent the popups
layer._leaflet_id = feature.properties.fid;
}

function clickOnMapItem(itemId) {
var id = parseInt(itemId);
//get target layer by it's id
var layer = geojson.getLayer(id);
//fire event 'click' on target layer 
layer.fireEvent('click');
}

function getName(e) {
//info.update is a function used to populate an external div
info.update(e.target.feature.properties);
}

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Точная причина проблемы с layer._leaflet_id = feature.properties.fid; остается неизвестной (как указывает YaFred, она является внутренней по отношению к Leaflet и поэтому не имеет подтверждающей документации), но я нашел альтернативное решение, которое, я надеюсь, поможет другим.

Вместо layer._leaflet_id = feature.properties.fid; я использовал layers[feature.properties.fid] = layer;, предварительно позвонив var layers = {};, основываясь на этом ответе.Я включил обновленный фрагмент кода, который создает функции Next и Previous, которые можно использовать для прокрутки слоя.

var currentPhoto;
var layers = {};


function onEachFeature(feature, layer) {
    layer.bindPopup('<b>Location: </b>' + feature.properties.name);
    layer.on(
        "click",function(e){getName(e);
        currentPhoto = parseInt(layer.feature.properties.fid);
    });
    layers[feature.properties.fid] = layer;
}

// call from outside map
function highlightFeature(fid){
    layers[fid].fireEvent('click');
}

$('#prev').click(function() {
    highlightFeature(currentPhoto-1);
});

$('#next').click(function() {
    highlightFeature(currentPhoto+1);
});

function getName(e) {
    //info.update is a function used to populate an external div
    info.update(e.target.feature.properties);
}
0 голосов
/ 03 февраля 2019

НЕ ИСПОЛЬЗУЙТЕ _leaflet_id

Он находится внутри листовки, и вы не найдете никакой документации по нему.

Для того, чего вы хотите достичь, я бы не стал использовать fireEvent('click')открыть всплывающее окно.Для этого есть метод openpopup.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...