2011-01-14 7 views
5

Ho lavorato su un sito che è stato scritto utilizzando Prototype ma lo stiamo spostando in jQuery. Molti aggiornamenti di pagina vengono eseguiti tramite Ajax.Updater di Prototype. Tuttavia, a volte gli elementi che Prototype rimuove e sostituisce hanno un widget jQuery eseguito su di essi, quindi $ .cache ha riferimenti agli elementi aggiuntivi creati dal widget. Dal momento che jQuery non sta facendo la rimozione del DOM, non ha la possibilità di cancellare i dati da $ .cache per quegli elementi quando vengono rimossi, e finisco con una perdita di memoria. C'è un modo per dire a jQuery di controllare che sia $ .cache e scartare qualsiasi dato per elementi che non sono più nel DOM?Utilizza jQuery .data() su un elemento e quindi rimuove l'elemento tramite la memoria di perdita diretta DOM manipolazione

risposta

3

suona un po 'difficile - soprattutto perché Ajax.Updater è una specializzazione di Ajax.Request che fa non hanno un callback onSuccess/onComplete, il che significa che probabilmente si dovrà fare un controllo periodico della cache, tra le altre cose. Sembra più un lavoro che creare un "programma di aggiornamento" di jQuery.

Se si desidera sostituire il programma di aggiornamento con una riscrittura jQuery, questo problema scompare completamente ed è sicuramente più semplice di lavorare attorno ad esso. Segue un semplice 'updater' in jQuery.

function update() { 
    $.ajax({ 
     type: 'get', 
     url: 'theContent.html', 
     success: function(text) { 
      // .html calls '.cleanData()' internally. No need to do anything else. 
      $('#updateMe').html(text); 
     } 
    }); 
} 

var i = setInterval(update, 5000); 
+0

Poiché stiamo già esegue una versione personalizzata di prototipo per cominciare, ho appena aggiornato il prototipo Object.remove e funzioni Object.update utilizzare jQuery per rimuovere elementi se jQuery è presente, garantendo così la pulizia dei dati. Non volevo scrivere un programma di aggiornamento di jQuery perché l'Ajax.Updater di Prototype è utilizzato in troppe parti del nostro codice per sostituirlo e testarlo completamente in un ragionevole lasso di tempo. –

Problemi correlati