ich die folgenden Dojo-Codes hat ein Oberflächengrafikelement unter einem div zu erstellen:entfernen alle Kinder DOM-Elemente in div
....
<script type=text/javascript>
....
function drawRec(){
var node = dojo.byId("surface");
// remove all the children graphics
var surface = dojox.gfx.createSurface(node, 600, 600);
surface.createLine({
x1 : 0,
y1 : 0,
x2 : 600,
y2 : 600
}).setStroke("black");
}
....
</script>
....
<body>
<div id="surface"></div>
....
drawRec() wird ein Rechteck Grafiken erstes Mal ziehen. Wenn ich diese Funktion wieder in einem Anker href wie folgt aufrufen:
<a href="javascript:drawRec();">...</a>
wird es wieder eine andere Grafik zeichnen. Was ich brauche, um alle Grafiken unter dem Div zu säubern und dann neu zu erstellen. Wie kann ich einige Dojo-Codes hinzufügen, um das zu tun?
Um pedantisch zu sein --- das Entfernen von DOM-Knoten ohne entsprechende JS-Objekte führt zu Speicherlecks. –
@Eugene: Kannst du mehr dazu sagen? –
@Tom: dojox.gfx erstellt JavaScript-Objekte für die Kommunikation mit dem zugrunde liegenden Grafiksystem, das DOM-Knoten (SVG, VML) oder nicht (Silverlight, Flash, Canvas) enthalten kann. Durch das Entfernen von DOM-Knoten aus DOM werden diese JavaScript-Objekte nicht entfernt, und ** ** DOM-Knoten werden nicht entfernt, da JavaScript-Objekte weiterhin Verweise auf diese DOM-Knoten enthalten. Der richtige Umgang mit dieser Situation ist in meiner Antwort auf diese Frage beschrieben. –