Ver Mensaje Individual
  #16 (permalink)  
Antiguo 25/12/2010, 16:51
Avatar de masterpuppet
masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 12 años
Puntos: 845
Respuesta: JQUERY - Live provoca memory leaks?

Gracias por la aclaración Dany_s al parecer reescribieron live para que funcione como un Delegator y delegate es un alias de live que te fuerza a utilizar los contextos,
creo que le han dejado el nombre live por compatibilidad.
leif_sk8er, te dejo una referencia y te hago una pregunta, porque no programar OOP el js ?, creo que por las caracteristicas de tu aplicacion ganarias mucho, un ejemplo para que quede mas grafico.

Código Javascript:
Ver original
  1. $(".videojuegos .crear_lista").live("click", function(){
  2.     id_wid= $(this).parent().parent().parent().parent().attr("id_widget");  
  3.     $("#"+id_wid+" .favoritos li div, #"+id_wid+" .favoritos_compartida li div").removeClass('activo'); // Quitamos la clase de activo en la lista de listas por si acaso
  4.     $("#"+id_wid+" .uispoty-left .bloqueSpoty .input_lista_nueva").val('');
  5.     $("#"+id_wid+" .uispoty-left .bloqueSpoty .form_lista_nueva").show();
  6.     $("#"+id_wid+" .uispoty-left .bloqueSpoty .boton_lista_nueva").hide();
  7.     $("#"+id_wid+" .uispoty-left .bloqueSpoty .input_lista_nueva").attr("disabled", false).focus();
  8.     $("#"+id_wid+" .uispoty-left .todosBloques").scrollTop(10000);
  9. });


podria ser esto:

Código Javascript:
Ver original
  1. //Game Class, file jquery.classes.js
  2. ...
  3. var Game = AbstractModel.extend({
  4.    options: {
  5.        scrollTop: 10000
  6.    },  
  7.    namespace: 'Game',
  8.    loadFromDOM: function(dom){      
  9.       this.container = $(dom);
  10.       if(!!this.container.data(this.namespace)){
  11.          return this.container(this.namespace);
  12.       }
  13.       this.input   = $(this.container.find('.input_lista_nueva')[0]) || false;
  14.       this.form    = $(this.container.find('.form_lista_nueva')[0]) || false;
  15.       this.button  = $(this.container.find('.boton_lista_nueva')[0]) || false;
  16.       this.block   = $(this.container.find('.todosBloques')[0]) || false;    
  17.       this.container.data(this.namespace, this);               
  18.       return this;
  19.    },
  20.     cleanUp: function(){
  21.        this.input.val('').attr('disabled', false).focus();      
  22.        this.button.hide();
  23.        this.button.show();
  24.        this.block.scrollTop(this.options.scrollTop);
  25.        return this;
  26.     }
  27. });


Código Javascript:
Ver original
  1. //este seria tu actual js.js
  2. //suponiendo que es un listado de juegos
  3. $(".videojuegos").delegate('li', 'click', function(){
  4.    var game = AbstractModel.factory('Game').loadFromDOM(this);
  5.    game.cleanUp();
  6. });

si bien puede ser un poco mas de código, la escalabilidad es superior, teniendo en cuenta el tipo de aplicación que estas desarrollando es algo a tener en cuenta, esto es una parte de un ejemplo mas grande que tengo si te interesa ya se a para aplicarlo o por simple curiosidad te lo puedo enviar, la verdad utilizo Mootools, esto es por diversión y me he quedado asombrado de lo que se puede hacer, no entiendo como es que hay tanto código spaguetti(esto es justamente lo que no me agrada de la libreria) con jQuery cuando se pueden hacer las cosas mucho mejor, otra cosita el ejemplo utiliza .data, un sistema de storage que tiene jQuery, ataca al DOM la primera vez que se hace click el resto de veces devuelve el objeto guardado, por mas que no te interese mi ejemplo deberias mirar .data.

Saludos.