Еще один вопрос о маркере AdvancedMarkerElement. Они не отображаются

Привет всем новичкам здесь и новичкам в JS. У меня есть приложение, которое используется более 10 лет и до сих пор используется. Он написан на PHP/Mysql/JS и использует GM для определения мест доставки. Я думал обновить его до новой системы маркеров, но не смог заставить ее работать. Я думаю, что это только я и мое ограниченное понимание JS.

В любом случае, следующий код показывает карту, но не маркеры. rfap3 и т. д. основаны на теге CSS. Любая помощь очень ценится. Действительно мог найти какие-либо существующие сообщения, которые мне помогли.

<script type = "text/javascript" src = "https://maps.googleapis.com/maps/api/js?callback=Function.prototype&key=MYKEY&loading=async"></script>
<script type = "text/javascript">
async function initmap() {
  // setTimeout second value is milliseconds
  // ie: 1000 = 1 second, 30000 = 30 seconds
  setTimeout( "document.location = document.location;", 30000);
  const { Map } = await google.maps.importLibrary("maps");
  const { AdvancedMarkerElement } = await google.maps.importLibrary("marker");
  const myLatLng = new google.maps.LatLng(-41.439068, 147.135773);
  const bounds = new google.maps.LatLngBounds();
  const myOptions = {
    zoom: 12,
    maxZoom: 18,
    center: myLatLng,
    mapTypeId: google.maps.MapTypeId.ROADMAP,
    mapId: 'rfamaps123456'
  };
  map = new google.maps.Map(document.getElementById("show_map"), myOptions);

  var rfastodo = [
    ['3055',-41.416744,147.134476,'rfap3',201],
    ['3082',-41.432907,147.152039,'rfap3',202],
    ['3079',-41.431507,147.147400,'rfap2',203]
  ];
  
setRFAs(map, rfastodo);

  function setRFAs(map, rfalist){
      const rfaTag = document.createElement("div");
      for (var i = 0; i < rfalist.length; i++) {
        var rfas = rfalist[i];
        var myLatLng2 = new google.maps.LatLng(rfas[1], rfas[2]);
        rfaTag.classname = rfas[3];
        rfaTag.textcontent = rfas[0];
        var marker = new AdvancedMarkerElement({
          position: myLatLng2,
          map: map,
          content: rfaTag,
          zIndex: rfas[4]
        });
      }
      bounds.extend(marker.position);
      map.fitBounds(bounds);
  }
}
</script>

Просто обнаружил, что все есть, кроме маркеров.

Есть ошибки в консоли?

Jaromanda X 03.07.2024 03:23

Об ошибках не сообщается.

Tastech72 03.07.2024 09:20

Интересно, это потому, что вы передаете один и тот же div всем маркерам, а он пуст, потому что вы используете rfaTag.textcontent, а не rfaTag.textContent

Jaromanda X 03.07.2024 10:12

Кроме того, разве bounds.extends не должен находиться внутри цикла for? Кроме того, rfaTag.classname должно быть rfaTag.className

Jaromanda X 03.07.2024 10:17

Спасибо, Джароманда. У нас есть прогресс. Изменение фиксированной части C и N. Я знаю, что у меня есть один маркер, только последний. Значит, остальные как-то переписаны. Я также перемещаю границы соответствия внутрь цикла, но, поскольку маркер только один, я не показываю никаких различий. Посмотрим, смогу ли я жестко закодировать часть rfaTag.

Tastech72 03.07.2024 10:44

переместите const rfaTag = document.createElement("div"); ВНУТРИ цикла for

Jaromanda X 03.07.2024 10:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

У вас есть несколько проблем с функцией setRFAs.

  // this should be inside the for loop
  const rfaTag = document.createElement("div");

и

    rfaTag.classname = rfas[3]; // this should be className
    rfaTag.textcontent = rfas[0]; // this should be textContent

и

  // this should be inside the for loop
  bounds.extend(marker.position);

С исправлениями, указанными выше, функция выглядит так:

function setRFAs(map, rfalist) {
  for (var i = 0; i < rfalist.length; i++) {
    const rfaTag = document.createElement("div");
    var rfas = rfalist[i];
    var myLatLng2 = new google.maps.LatLng(rfas[1], rfas[2]);
    rfaTag.classBame = rfas[3];
    rfaTag.textContent = rfas[0];
    var marker = new AdvancedMarkerElement({
      position: myLatLng2,
      map: map,
      content: rfaTag,
      zIndex: rfas[4]
    });
    bounds.extend(marker.position);
  }
  map.fitBounds(bounds);
}

в качестве бонуса - я бы написал так

function setRFAs(rfaList) {
  rfaList.forEach(([textContent, lat, lng, className, zIndex]) => {
      const content = document.createElement("div");
      content.className = className;
      content.textContent = textContent;
      position = new google.maps.LatLng(lat, lng);
      const marker = new AdvancedMarkerElement({position, map, content, zIndex});
      bounds.extend(marker.position);
    }
  );
  map.fitBounds(bounds);
}

и вызовите его без аргумента map, поскольку это похоже на то, как вы не вызываете его с bounds, вы все равно просто используете bounds из внешней области видимости

Мы - посетитель! Огромное спасибо, Джароманда X, и я кое-чему научился (надеюсь :-)

Tastech72 03.07.2024 12:43

Другие вопросы по теме