2010-06-15 11 views
0

Je travaille dans Flash Builder 4 avec l'API ActionScript de Google Map. J'ai créé une carte, chargé des marqueurs personnalisés et ajouté des écouteurs MouseEvent à chaque marqueur.API Google Maps dynamique Contenu HTML InfoWindow

Le problème vient lorsque je charge un panneau InfoWindow. Je souhaite définir de manière dynamique le htmlContent en fonction des informations stockées dans une base de données. Le problème est que cette information peut changer toutes les deux secondes et chaque marqueur a un ensemble de données unique, donc je ne peux pas le définir de façon statique au moment où je crée réellement les marqueurs. J'ai une méthode qui chaque minute ou alors charger tous les enregistrements de ma base de données dans une variable d'objet. Tout ce que j'ai besoin d'afficher dans htmlContent est contenu dans cet objet sous un identifiant unique. Le point fondamental du problème est qu'il n'y a aucun moyen pour moi d'identifier de manière unique une fenêtre d'information, donc je ne peux pas déterminer quelles informations à tirer dans le panneau.

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

C'est mon écouteur d'événement de souris. La fonction que j'appelle, « showInfowindow » ressemble à ceci:

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); 
} 

Je croyais être sur quelque chose en étant capable de passer une variable dans ma déclaration d'écouteur d'événement, mais il déteste tout simplement avoir une variable dynamique passée à travers, il renvoie uniquement la dernière utilisation de la valeur.

Exemple:

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

Cette solution est douloureusement à travailler. Je parcoure une boucle pour créer mes marqueurs lorsque j'essaie la solution ci-dessus et que je passe au-dessus d'un marqueur. Je reçois des informations, mais les informations de chaque marqueur reflètent toutes les informations que le dernier marqueur avait.

Je m'excuse pour la longue explication, mais je voulais juste que ma question soit aussi claire que possible. Est-ce que quelqu'un a des idées sur la façon de réparer ma solution presque-là-bas que j'ai posté au bas de l'écran ou de toute autre solution?

Merci à l'avance,

Peter Hanneman

+1

Je n'ai aucune expérience avec ActionScript, mais cela ressemble à un problème de fermeture. Vous voudrez peut-être consulter cet article: https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Working_with_Closures#Creating_closures_in_loops.3a_A_common_mistake (sur JavaScript, mais je suppose que la même chose s'applique à Action Script) –

Répondre

0

J'ai créé une très laide solution de contournement pour le moment ..

Depuis la longitude de chaque marqueur & latitude est unique j'ai ajouté un peu de code où la des marqueurs sont ajoutés à la carte qui a créé un tableau associatif globalement visible qui utilise un hachage de l'objet d'emplacement de l'API Google Map en tant que clé et mon identifiant unique en tant que valeur. Ensuite, plus tard, lorsque mon écouteur d'événement a déclenché, j'ai pu extraire l'objet location de l'événement retourné, le hacher, effectuer une recherche dans mon tableau et extraire l'identifiant unique pour extraire les informations spécifiques au marqueur dans InfoWindow.

Ça marche à merveille, mais ça me laisse sale. S'il vous plaît dites-moi quelqu'un a une meilleure solution?

+0

Je pense que c'est joli beaucoup la bonne solution. Même les exemples sur le site API Google Maps utilisent un tableau global de marqueurs pour basculer l'InfoWindow de l'un à l'autre ... – Alexandra

Questions connexes