2012-04-09 2 views
1

Ich arbeite mit einer Vielzahl von Markern 10.000+ und alle sollten anklickbar sein. Im Moment erstelle ich eine separate Callback-Funktion für jeden Marker, die eine Schließung aller Daten ist, die ich brauche. Ich habe versucht, die Erstellung von 10.000 Funktionen zu verhindern, die alle das gleiche machen und die Daten, die ich brauche, als Argument an die cb-Funktion übergeben, aber das scheint unmöglich.Wie man Daten an google-maps Callback-Funktionen weiterleitet und Speicherlecks verhindert

Aber es gibt eine Möglichkeit, die Daten trotzdem zur Callback-Funktion zu bekommen. 'This' zeigt in der cb-Funktion auf die tatsächlich angeklickte Markierung und ich kann auf die benötigten Daten zugreifen, wenn ich sie an das Marker-Objekt anschließe. Das ist sehr dreckig, aber es scheint zu funktionieren.

Aber das verursacht weitere Probleme: Ich bezweifle, dass dies Speicherlecks verursacht. Ich Referenz die Markierung in dem Objekt, das der Marker für wie obj.marker steht aber das Objekt in der cb-Funktion, die ich wie das Objekt zu verweisen habe Zugriff auf marker.obj

// Callback function for clicks on markers 
function cb(e){ 
    console.log(e); // the event with information about marker position 
    console.log(this.obj); // the object the marker stands for 
} 

//add a eventListener to the marker which represents a object 
this.initMarkerListener = function(obj) { 
    obj.marker.obj = obj;  //the critical point 
    google.maps.event.addListener(obj.marker, 'click', cb); 
}; 

Ist dies ein Speicherleck erzeugt? Und kann ich die erforderlichen Daten mit einer anderen Technik an die Callback-Funktion übergeben?

Antwort

0

Es ist nichts falsch mit Ihrer Vorgehensweise. Ein Speicherverlust tritt auf, wenn Verweise, die Sie "bereinigen" möchten (lassen Sie die GB ungenutzte Verweise bereinigen), zurück.

Betrachten Sie dann, dass, wenn Marker im Speicher vorhanden ist, und Sie Obj löschen, weil Marker einen Verweis auf Obj enthält, dann wird die GB obj nicht auswählen, um diesen Speicherbereich freizugeben.

Verwandte Themen