Контекст запроса без сеанса [дубликат]

Вот еще одна версия, которую я написал для сохранения картографической недвижимости, которая помещает указатель infowindow на фактический лат и длинный маркер, а также временно скрывает маркер, пока отображается информационное окно.

It также устраняет стандартное назначение маркера и ускоряет обработку, напрямую назначая новый маркер массиву маркеров при создании маркеров. Обратите внимание, однако, что дополнительные свойства были добавлены как к маркеру, так и к infowindow, поэтому этот подход является немного нетрадиционным ... но это я!

Это никогда не упоминается в этих заданных вопросах, что стандартное infowindow НЕ помещается в lat и lng точки маркера, а скорее в верхнюю часть изображения маркера. Видимость маркера должна быть скрыта, чтобы это работало, иначе API Карт снова запустит привязку infowindow обратно в верхнюю часть изображения маркера.

Ссылка на маркеры в массиве «маркеры» создается немедленно при объявлении маркера для любых дополнительных задач обработки, которые могут потребоваться позже (скрытие / показ, захват коордов и т. д.). Это сохраняет дополнительный шаг назначения объекта маркера «маркеру», а затем нажимает «маркер» на массив маркеров ... много ненужной обработки в моей книге.

Во всяком случае, другой подход на infowindows и надеемся, что это поможет вам информировать и вдохновить вас.

    var locations = [
      ['Bondi Beach', -33.890542, 151.274856, 4],
      ['Coogee Beach', -33.923036, 151.259052, 5],
      ['Cronulla Beach', -34.028249, 151.157507, 3],
      ['Manly Beach', -33.80010128657071, 151.28747820854187, 2],
      ['Maroubra Beach', -33.950198, 151.259302, 1]
    ];
    var map;
    var markers = [];

    function init(){
      map = new google.maps.Map(document.getElementById('map_canvas'), {
        zoom: 10,
        center: new google.maps.LatLng(-33.92, 151.25),
        mapTypeId: google.maps.MapTypeId.ROADMAP
      });

      var num_markers = locations.length;
      for (var i = 0; i < num_markers; i++) {  
        markers[i] = new google.maps.Marker({
          position: {lat:locations[i][1], lng:locations[i][2]},
          map: map,
          html: locations[i][0],
          id: i,
        });

        google.maps.event.addListener(markers[i], 'click', function(){
          var infowindow = new google.maps.InfoWindow({
            id: this.id,
            content:this.html,
            position:this.getPosition()
          });
          google.maps.event.addListenerOnce(infowindow, 'closeclick', function(){
            markers[this.id].setVisible(true);
          });
          this.setVisible(false);
          infowindow.open(map);
        });
      }
    }

google.maps.event.addDomListener(window, 'load', init);

Здесь работает JSFiddle

Дополнительная заметка Вы заметите в этом Данные примера Google - четвертое место в массиве «местоположения» с номером. Учитывая это в этом примере, вы также можете использовать это значение для идентификатора маркера вместо текущего значения цикла, так что ...

var num_markers = locations.length;
for (var i = 0; i < num_markers; i++) {  
  markers[i] = new google.maps.Marker({
    position: {lat:locations[i][1], lng:locations[i][2]},
    map: map,
    html: locations[i][0],
    id: locations[i][3],
  });
};

5
задан AndrewBourgeois 29 May 2012 в 09:32
поделиться

1 ответ

Вы почти никогда не должны ожидать нулевого значения. Как сказано в документации, если для запроса нет активного сеанса (обычно, вы должны проверить это в цепочке фильтров запроса), будет создан сеанс. Если вы получите нулевое значение от этого, я бы сказал, что в базовой ОС есть проблема: недостаточно памяти для создания сеанса.

4
ответ дан 0xCAFEBABE 26 August 2018 в 08:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: