2008-12-13 7 views
0

J'ai ce code qui génère des marchés sur lesquels je veux être cliquable avec une fenêtre contextuelle.API Google Maps - Impossible de charger correctement les données de la fenêtre d'information

for (i = 0; i < marker_array.length; i++) { 
    var point = new GLatLng(marker_array[i][0], marker_array[i][1]); 
    var marker = new GMarker(point, markerOptions); 

    GEvent.addListener(marker, "click", function() { 
     marker.openInfoWindowHtml(html_data); 
     }); 
    map.addOverlay(marker); 
    } 

Le problème est qu'un seul marché finit par être cliquable. Peu importe lequel est cliqué, une fenêtre d'informations contenant les données du marqueur cliquable apparaît sur ce marqueur cliquable. Tous les marqueurs se chargent et se trouvent dans les emplacements corrects. Le problème consiste donc à afficher les fenêtres de la fenêtre contextuelle.

J'ai parcouru la section sur le "déroulement" de la fonction de marqueur here et il semble que c'est probablement là où je me trompe, mais je n'ai pas réussi à tester les changements qu'ils suggèrent.

+0

Quelle est la source de 'html_data'? avez-vous l'intention que ce soit la même chose pour chaque marqueur? parce que c'est comme ça que votre échantillon fonctionne. – lincolnk

Répondre

0

Je ne suis pas sûr si je suis, mais dites-vous que tous les popups ont les mêmes données?

Je pense que c'est le problème, et c'est à cause de la façon dont les écouteurs d'événements fonctionnent. Lorsque la fonction de clic se produit, elle évalue l'événement de l'écouteur. Ainsi, le code HTML que vous affichez est toujours le même, car la variable est toujours réécrite.

+0

Les pop-ups ne génèrent que sur l'un des marqueurs. En d'autres termes: lorsque je clique sur m1, les données m2 apparaissent sur m2, lorsque je clique sur m2, les données m2 apparaissent sur m2. – Evan

0

J'utilise un tableau qui correspond à mes données de marquage pour mon HTML et il fonctionne bien:

function createMarker(posn, title, icon, i) { 
    var marker = new GMarker(posn, {title: title, icon: icon, draggable:false}); 
    GEvent.addListener(marker, 'mouseover', function() { 
     map.closeInfoWindow() 
     marker.openInfoWindowHtml(infoText[i]) 

    }); 
    return marker; 
} 
1

Je crois que votre problème est que la html_data variable est la même pour toutes les itérations de cette boucle. Vous devez mettre à jour cette variable dans la boucle pour que les valeurs soient différentes.

0

J'ai trouvé le même cas, et j'ai une solution à ce problème. Je vous suggère de créer une classe Marker étendue de classe personnalisée. Dans cette classe personnalisée, vous devez créer un constructeur ayant un ou plusieurs paramètres pour vos données, et cette classe devrait également avoir sa propre variable de fenêtre d'information qui sera appelée depuis votre application principale. Par exemple:

La classe personnalisée:

public class StoreSpot extends Marker 
{ 
    public var infoWindow:InfoWindowOptions; 
    public var store_id:String; 
    public var address:String; 
    public var name:String; 
    ... 
} 

La principale application:

tempMarker = new StoreSpot(
    tempLatlng, 
    new MarkerOptions({ 
     icon:new spotStore(), 
     iconAlignment:MarkerOptions.ALIGN_HORIZONTAL_CENTER, 
     iconOffset:new Point(0,-50) 
    }), 
    temp.store_id, 
    temp.name, 
    temp.address, 
    temp.detail 
); 

De cette façon, vous pouvez placer autre fenêtre d'information pour le marqueur différent. J'espère que cela fonctionne pour toi. Entrez le code ici.

Questions connexes