2016-04-30 15 views
0

Ich habe ein ziemlich seltsames Problem mit meinem Code. Ich benutze geoxml3, um eine kml-Datei zu parsen, und analysiert alle Polylinien, aber wenn es zu den Markierungen kommt, sagt die Konsole, dass es undefined ist. Der komische Teil ist, dass jedes Mal, wenn ich die Seite neu lade, es funktioniert, aber jedes Mal, wenn ich in einem neuen Tab öffne, bricht es wieder. Noch seltsamer, wenn ich eine console.log direkt vor der Bedingung, um zu überprüfen, ob es eine Polylinie oder ein Marker ist, zeigt die Browser-Konsole zeigt, dass es eine Eigenschaft.Javascript nur Zugriff Objekteigenschaft nach dem Neuladen der Seite

Hier ist meine useTheData Funktion, die geoxml3 erfordert:

function useTheData(doc){ 
console.log("Starts Parse"); 
console.log(doc[0].placemarks.length); 
for (var i = 0; i < doc[0].placemarks.length; i++){ 
    console.log("i: "+i+", placemark:");  
    console.log(doc[0].placemarks[i]); //here the .marker property exists in the console 
    console.log(".marker:"); 
    console.log(doc[0].placemarks[i].marker); //here it says it's undefined! 
    if(doc[0].placemarks[i].polyline){ //check if it's a polyline 
     google.maps.event.addListener(doc[0].placemarks[i].polyline, 'click', select_option); 
    } 
    else{ 
     console.log("### i = "+i); 
     console.log("1"); 
     console.log(doc[0].placemarks[i].marker); //here, the exact same object, doesn't have the marker property! 
     console.log("2"); 
     google.maps.event.addListener(doc[0].placemarks[i].marker, 'click', select_option); //Because of that, the first time the page loads, it get's stuck in the function cuz it can't access the .marker 
     console.log("3"); 
     doc[0].placemarks[i].marker.setIcon({ 
      url: "img/bola.png", 
      scaledSize: new google.maps.Size(10, 10), 
      anchor: new google.maps.Point(5, 5) 
     }); 
     console.log("4"); 
    } 
} 
console.log("End Parse"); 
google.maps.event.addListener(map, 'click', select_option); 
} 
+0

Bitte geben Sie ein [minimales, vollständiges, getestetes und lesbares Beispiel] (http://stackoverflow.com/help/mcve) an, das das Problem demonstriert (und einige Hinweise darauf, welche Version von geoxml3 Sie verwenden). – geocodezip

+0

'Uncaught ReferenceError: select_option ist nicht definiert' – geocodezip

+0

Ich verwende die allerletzte Version vom 6. April, die von Github heruntergeladen wurde. Das Problem ist, dass die Geoxml bekommt einen kml von einem lokalen Server, ich werde versuchen, den Code auf einem Server zu veröffentlichen, um den Fehler vollständig reproduzieren zu können. Alle AddListener-Funktionen können jedoch entfernt werden, und der Fehler tritt weiterhin auf. – Cesar

Antwort

1

Dies ist auf einen der Unterschiede zwischen der Polys und KMZ Zweigen geoxml3.

Der kmz-Zweig von geoxml3 hat einen img-onload-Ereignishandler für Symbole, der dazu führen kann, dass sie erst nach dem Ende der Analyse verfügbar sind. Dadurch wird die Größe des Symbols besser, es können jedoch Probleme auftreten, die in der afterParse-Funktion zu sehen sind.

Verwandte Themen