Есть ли лучший способ сделать это?
Я собираюсь попробовать лучший способ сделать это. Во-первых, хорошо избегать каждого добавления анонимной функции в addEventListener, потому что вы не сможете удалить этих слушателей и не будете собирать мусор - поэтому у вашего приложения будут утечки памяти.
С учетом сказанного, Dictionary
было бы идеально для этой цели.
Вместо того, чтобы обслуживать два отдельных массива и пытаться связать их вместе, синтаксис «ключ: значение» словаря значительно упростит ваш рабочий процесс.
Сначала вы должны настроить свой словарь:
var markersDictionary:Dictionary = new Dictionary(true);
//you didn't show how you create your arrays so I'm showing
//you how to create a dictionary manually.
//this can also be done in a loop
markersDictionary[marker] = new InfoWindow(); // This should be whatever is in your infoWindows array
markersDictionary[marker] = new InfoWindow();
markersDictionary[marker] = new InfoWindow();
Теперь, чтобы добавить слушателей:
for(var key:Object in markersDictionary)
{
var marker:Marker = markersDictionary[key];
marker.addEventListener(MouseMapEvent.CLICK, markerClickhandler, false, 0, true);
//...false, 0, true is for weak event listeners, you should get in
// the habit of always doing this unless you have a reason to otherwise.
{
и, конечно, вам нужно определить markerClickhandler
:
function markerClickhandler(event:MouseMapEvent):void
{
var marker:Marker = event.target as Marker;
marker.openInfoWindow(InfowWindow(markersDictionary[marker]);
}