2011-01-14 11 views
5

He estado trabajando en un sitio que se escribió usando Prototype pero lo vamos a pasar a jQuery. Se realizan muchas actualizaciones de página a través de Ajax.Updater de Prototype. Sin embargo, a veces los elementos que Prototype elimina y reemplaza tienen un widget jQuery ejecutándose en ellos, por lo que $ .cache tiene referencias a los elementos adicionales creados por el widget. Dado que jQuery no está realizando la eliminación de DOM, no tiene la posibilidad de borrar los datos de $ .cache para esos elementos cuando se eliminan, y termino con una pérdida de memoria. ¿Hay alguna manera de decirle a jQuery que compruebe que es $ .cache y descarte los datos de los elementos que ya no están en el DOM?Utiliza jQuery .data() en un elemento y luego elimina el elemento a través de la memoria de fuga directa de manipulación DOM

Respuesta

3

suena un poco difícil - sobre todo desde Ajax.Updater es una especialización de la que hace Ajax.Request no tienen una devolución de llamada onSuccess/onComplete, lo que significa que es probable que tenga que hacer una comprobación periódica de la caché, entre otra cosas. Eso suena a más trabajo que crear un 'actualizador' de jQuery.

Si está dispuesto a reemplazar el actualizador con una reescritura jQuery, este problema desaparece por completo, y es ciertamente más simple que solucionarlo. Sigue 'updater' simple en 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

Dado que ya está ejecutando una versión personalizada de Prototipo, para empezar, me acaba de actualizar el prototipo Object.remove y funciones Object.update a usar jQuery para eliminar elementos de jQuery, si está presente, lo que garantiza la limpieza de datos. No quería escribir un actualizador de jQuery porque el Ajax.Updater de Prototype se usa en muchos lugares de nuestro código para reemplazarlo y probarlo completamente en un tiempo razonable. –

Cuestiones relacionadas