Leaflet MarkerCluster bindPopup в цикле использует только последнее значение

Я написал этот фрагмент, используя библиотеку Leaflet MarkerCluster, и я пытаюсь программно назначить разные сообщения каждому маркеру, используя метод bindPopUp:

  var markers = L.markerClusterGroup();

  for (const [key, value] of Object.entries(data['Company Name'])) {
    var temp = {};
    temp['ESG Risk Score'] = 1/data['ESG Risk Score'][key];
    temp['Coordinates'] = [data['Latitude'][key], data['Longitude'][key]];
    temp['Market Cap'] = String(data['Market Cap'][key]).replace(/\B(?=(\d{3})+(?!\d))/g, ",");;
    temp['Company Name'] = value;
    var message = "<p>ESG score: " + data['ESG Risk Score'][key] + "</p><p>Company Name: " + temp['Company Name'] + "</p><p>Market Capital $: " + temp['Market Cap'];
    markers.addLayer(L.marker(temp["Coordinates"])).bindPopup(message).addTo(myMap);
  }

Проблема, с которой я сталкиваюсь, заключается в том, что последний message привязывается ко всем отметкам на карте.

Есть ли способ не перезаписывать каждое всплывающее окно последним значением в цикле?

Спасибо!


person Learningtocode2010    schedule 03.02.2020    source источник


Ответы (1)


Из-за того, как вы разместили скобки, вы применяете метод bindPopup к своей markers MarkerClusterGroup, а не к своему отдельному маркеру:

markers.addLayer(L.marker(temp["Coordinates"])).bindPopup(message)

...должно было:

markers.addLayer(L.marker(temp["Coordinates"]).bindPopup(message))

Примечание. Вы можете повысить производительность, добавив все свои маркеры в MCG сразу после цикла (используйте addLayers) или добавив свой MCG на карту только после цикла.

person ghybs    schedule 03.02.2020
comment
Спасибо большое! Очевидно, вы хорошо разбираетесь в этом.. Это сработало! - person Learningtocode2010; 03.02.2020