2013-06-14 3 views
1

J'essaye d'écrire un script GoogleMap.js propre. J'ai créé une classe js qui contient gMarker et gInfoWindow et je veux définir une propriété "openInfoWindow" dans son prototype (partagé), donc je peux le fermer et le changer chaque fois que l'utilisateur clique sur le gMarker particulier sans le déclarer global .Problèmes de prototype Javascript (avec google maps)

function gMarkerWInfo(gMarker,gInfoWindow){ 
    if(!gMarker || !gInfoWindow) 
     return null; 
    this.Marker = gMarker; 
    this.InfoWindow = gInfoWindow; 
} 

gMarkerWInfo.prototype.openedInfoWindow = null; 

gMarkerWInfo.prototype.openInfoWindow = function(){ 
    if(this.openedInfoWindow){ 
     alert(this.openedInfoWindow.getContent()); 
     //openedInfoWindow.close(); 
    } 
    this.InfoWindow.open(this.Marker.getMap(),this.Marker); 
    this.openedInfoWindow = this.InfoWindow; 
} 

La « alerte » est à des fins de débogage et, chaque fois que je clique dessus, il me montre le contenu du InfoWindow « lié » à la gMarker je viens cliqué. Donc le "openInfoWindow" ne fonctionne pas comme j'espère. Quelqu'un peut-il m'aider?

PS. Voici la fonction que j'utiliser pour créer le gMarkerWInfo à l'intérieur du « GoogleMap » classe:

this.createMarkerWInfo = function(LatLng,Name,HTML_Infos){ 
    var gMarker = new google.maps.Marker({ position: LatLng, 
              animation: this.MarkerAnimation, 
              map: priv_Map, 
              title: Name 
             }); 
    var gInfoWindow = new google.maps.InfoWindow({content:HTML_Infos}); 
    var gMarkerWInfoWindow = new gMarkerWInfo(gMarker,gInfoWindow); 
    google.maps.event.addListener(gMarker,'click', function() {gMarkerWInfoWindow.openInfoWindow();}); 
    return gMarkerWInfoWindow; 
} 
+0

Les propriétés InfoWindow'-'openedInfoWindow/ne sont pas partagés entre quoi que ce soit, ils ont été affectés aux instances gMarkerWInfo'-', chaque marqueur créé aura C'est sa propre propriété. Vous pouvez affecter ces propriétés à l'instance de carte à la place pour pouvoir les partager entre les marqueurs. –

+0

Je peux même déclarer une variable globale et la rendre ainsi, mais je voulais comprendre comment fonctionne la propriété prototype. ["Mais la puissance réelle du prototype est visible lorsque plusieurs instances partagent un prototype commun Les propriétés de l'objet prototype sont définies une fois mais héritées par toutes les instances qui le référencent."] (Http://javascriptweblog.wordpress.com/2010/06/07/understanding-javascript-prototypes /). Sans le prototype, je ne pouvais même pas utiliser 'gMarkerWInfo.prototype.openInfoWindow = function() {...}', cela fonctionne réellement. Donc, je demande, comment puis-je l'utiliser pour mon but? –

+0

je l'ai trouvé, voici la [réponse] (http://stackoverflow.com/a/17139119/2292981) –

Répondre

-1

lecture this article j'ai trouvé ceci: "La définition: la propriété prototype d'une fonction est l'objet qui sera attribué comme prototype à toutes les instances créées. [...] Il est important de comprendre que la propriété prototype d'une fonction n'a rien à voir avec son prototype réel "

Alors j'ai compris que le Object.prototype, que j'essayais d'utiliser avant, isn 't le même que le Function.prototype, qui convient à mes intérêts.

Alors voilà, travaille enfin:

function gMarkerWInfo(gMarker,gInfoWindow){...} 

gMarkerWInfo.prototype.openedInfoWindow = null; 

gMarkerWInfo.prototype.openInfoWindow = function(){ 
    if(gMarkerWInfo.openedInfoWindow) 
      gMarkerWInfo.openedInfoWindow.close(); 
    this.InfoWindow.open(this.Marker.getMap(),this.Marker); 
    gMarkerWInfo.openedInfoWindow = this.InfoWindow; 
}