2013-04-07 3 views
8

Wie kann ein jQuery-Flot-Diagramm auf eine Weise zerstört werden, die alle Event-Handler bereinigt und nicht zu einem Speicherleck führt?Zerstören von jQuery-Flotendiagrammen

Es scheint, flicht hinter einigen Zombies verlassen (auch bekannt als unabhängiges Dom Bäume)

+0

'$ .plot ('# yourFlotDiv', {}, {});' lesen Sie es irgendwo. Erinnere dich nicht genau wo. – Ejaz

Antwort

3

, wenn Sie Ereignishandler entfernen möchten dann jquery off Methode versuchen.

zum Löschen der Flot-Grafik. Du kannst das div leeren.

$('#yourFlotDiv').empty(); 
+0

Welche Argumente sollten an jQuery.off() übergeben werden? – thecountofzero

+0

@thecountofzero $ ("# yourFlotDiv"). Off ("yourEventHandlerTORemove"); Weitere Informationen finden Sie unter http://api.jquery.com/off/ –

+0

Ich spreche darüber, sicherzustellen, dass Flot alle Event-Handler bereinigt und alle von ihm erstellten DOM-Elemente löscht. – thecountofzero

5

Wenn Sie die API-Dokumentation zu lesen, gibt es eine Shutdown-Methode, die

für Sie reinigt
shutdown() 

Cleans up any event handlers Flot has currently registered. This 
is used internally. 

zB.

var plot = $.plot($("#yourDiv"), options) 

plot.shutdown() 
+0

Das ist korrekt und funktioniert. – MirroredFate

4

Für Menschen, die hier in der Zukunft kommen, gibt es jetzt eine destroy Funktion, die Abschaltung und entfernt das Canvas-Element nennt. Es ist aus irgendeinem Grund in der API nicht dokumentiert, ist aber im Code zur Verfügung:

var flot = $("#FlotDiv").data('plot') 
if (flot) // If it's destroyed, then data('plot') will be undefined 
    flot.destroy(); 
0

Um die flicht Graph zu entfernen

var placeholder = $("#FlotDiv"); 
placeholder.unbind(); //Remove a previously-attached event handler from the elements. 
placeholder.empty(); 

Auch falls Sie wünschen bestimmtes Ereignis zu lösen ist dies der Weg zu gehen :

$("#foo").unbind("click"); 

überprüfen Für weitere Informationen this aus.