Google Maps API v3: Markierungen werden nicht entfernt

9

Ich erstelle eine Karte, die & amp; Zerstört Marker basierend auf dem Begrenzungsrahmen und der Zoomstufe. Ich habe ein echtes Problem damit, Markierungen zu entfernen, die manchmal entfernt werden müssen. Manchmal scheint es für bestimmte Situationen zu funktionieren.

Ich habe ein Objekt, das die Marker-Info enthält, die auch das Google Maps-Marker-Objekt enthält. Mein Code erkennt, ob der Markt basierend auf dem Begrenzungsrahmen oder der Zoomstufe gelöscht werden soll. Ich setze das Marker-Objekt auf "setMap (null);" und mit firebug kann ich sehen, dass es gesetzt ist, dann entferne ich das übergeordnete Objekt vollständig und die Objektdatenlänge wird korrekt aktualisiert.

Ich gebe an die Firebug-Konsole aus, wenn ein Marker angeblich gelöscht wurde, scheint zu funktionieren und ich kann sehen, dass der Marker nicht vom Ajax-Aufruf für Marker auf dem Boundingbox-Wechsel rekrutiert wird.

Wenn ich jedoch um die Karte herum zoome, kann ich manchmal sehen, dass die Marker entfernt werden, wenn ich wegzoom, dann schwenken und die Maus nach unten halten. Oder manchmal werden die Markierungen entfernt, wenn ich das erste Mal zoome, aber wenn ich wieder heranzoome und dann wieder herausziehe, werden sie nicht entfernt.

Ich muss etwas falsch mit der Logik meines Codes tun, ich bin ratlos.

Sie können die Quelle von anzeigen Ссылка das JS ist Ссылка

Der Code zum Löschen eines Markers befindet sich am unteren Rand

%Vor%

Ich habe der Konsole etwas Debuggen hinzugefügt, indem ich in einen einfachen Bereich der Karte mit nur zwei Markierungen ging Ссылка

Ich kann die erstellten Markierungen sehen, dann die Karte ein wenig verschieben und feststellen, dass die Markierungen nicht neu erstellt wurden, weil sie im Markierungsobjekt erkannt wurden. Ich bewege dann das Ansichtsfenster, so dass eine der Markierungen vom Bildschirm verschwindet, und ich kann sehen, dass die Markierung entfernt und die Markierungsobjektlänge aktualisiert wird. Aber wenn ich die Karte wieder überkreuze, ist der Marker immer noch auf der Karte.

    
Canadaka 20.07.2012, 23:33
quelle

2 Antworten

3

Ich hatte lange Zeit mit einem ähnlichen Problem zu kämpfen, bis ich feststellte, dass die setMap-Methode der Kartenmarkierung asynchron ist. Wenn Sie das aufrufen und alle Verweise auf dieses Markierungsobjekt sofort entfernen, tritt der Garbage Collector des Browsers ein und bereinigt ihn aus dem Speicher und verhindert so den eigentlichen Entfernungsvorgang.

Probieren Sie es aus, indem Sie einfach die Linie mit dem Spleißanruf auskommentieren und sehen, ob das hilft. Wenn es hilft, sollten Sie in Betracht ziehen, das Entfernen des Objekts zu verzögern oder alternativ den Verweis auf das Markierungsobjekt zu speichern, bis es wirklich entfernt wird. Wie erkennt man, ob es wirklich entfernt wurde? Ich habe keine Ahnung.

Ich hoffe, das hilft!

    
jylauril 14.12.2012 08:39
quelle
0

Anstatt zu tun:

%Vor%

ändere es zu:

BEARBEITEN, (nach Kommentaren):

Um zu verhindern, dass mehrere Instanzen des Event-Handlers gleichzeitig auftreten, könnte eine globale Variable wie folgt verwendet werden:

%Vor%

Das sollte beide Situationen abdecken. Wie es jetzt ist, könnten die AJAX-Aufrufe bei zwei verschiedenen Ereignis-Listenern widersprüchlich sein, und Sie könnten vielleicht einen zweiten Aufruf auslösen, bevor der erste abgeschlossen ist.

    
Marcelo 21.07.2012 08:21
quelle