2010-06-15 3 views
0

Я работаю в Flash Builder 4 с API-интерфейсом API карты Google. Я создал карту, загрузил на нее некоторые пользовательские маркеры и добавил к каждому маркеру некоторых слушателей MouseEvent.Динамический API Google Maps InfoWindow Содержимое HTML

Проблема возникает, когда я загружаю панель InfoWindow. Я хочу динамически установить htmlContent на основе информации, хранящейся в базе данных. Проблема в том, что эта информация может меняться каждые две секунды, и каждый маркер имеет уникальный набор данных, поэтому я не могу статически устанавливать его во время создания маркеров. У меня есть метод, который каждую минуту загружает все записи из моей базы данных в переменную Object. Все, что мне нужно отобразить в htmlContent, содержится в этом объекте под уникальным идентификатором.

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

marker.addEventListener(MapMouseEvent.ROLL_OVER, function(e:MapMouseEvent):void { showInfoWindow(e.latLng) }, false, 0, false); 

Это мой прослушиватель событий мыши. Функция я называю, «showInfowindow» выглядит следующим образом:

private function showInfoWindow(latlng:LatLng):void 
{ 
    var options:InfoWindowOptions = new InfoWindowOptions({title: appData[*I NEED A UNIQUE ID HERE!!!*].type + " Summary", contentHTML: appData[*I NEED A UNIQUE ID HERE!!!*].info}); 
    this.map.openInfoWindow(latlng, options); 
} 

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

Пример:

marker.addEventListener(MapMouseEvent.ROLL_OVER, function(e:MapMouseEvent):void { showInfoWindow(e.latLng, record.unit_id) }, false, 0, false); 

Это решение мучительно близко к работе. Я повторяю цикл, чтобы создать свои маркеры, когда я попробую вышеупомянутое решение и перевернул маркер. Я получаю информацию, но информация каждого маркера отражает любую информацию, созданную последним маркером.

Прошу прощения за длинное объяснение, но я просто хотел сделать свой вопрос максимально ясным. Есть ли у кого-нибудь какие-либо идеи о том, как исправить мое почти-то-решение, которое я разместил внизу или с самого начала?

Спасибо заранее,

Питер Ханнеман

+1

У меня нет опыта работы с ActionScript, но это похоже на проблему с закрытием. Вы можете проверить эту статью: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Working_with_Closures#Creating_closures_in_loops.3a_A_common_mistake (на JavaScript, но я думаю, что то же самое относится к Action Script) –

ответ

0

Я создал очень некрасиво обходной путь для поры до времени ..

С долготой каждого маркера & широта является уникальным, я добавил немного кода, где маркеры добавляются на карту, которая создала глобально видимый ассоциативный массив, который использовал хэш объекта местоположения API карты Google в качестве ключа и моего уникального идентификатора в качестве значения. Затем, когда мой слушатель событий был запущен, я смог извлечь объект местоположения из возвращаемого события, хеш-файл, выполнить поиск в моем массиве и вытащить уникальный идентификатор, чтобы вытащить определенную информацию маркера в InfoWindow.

Это прекрасно работает, но это оставляет мне ощущение грязности. Скажите, пожалуйста, у кого-то есть лучшее решение?

+0

Я думаю, что это довольно правильное решение. Даже примеры на сайте Google Maps API используют глобальный массив маркеров для переключения InfoWindow от одного к другому ... – Alexandra

Смежные вопросы