Ver Mensaje Individual
  #15 (permalink)  
Antiguo 09/07/2011, 14:16
Avatar de _cronos2
_cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 14 años, 5 meses
Puntos: 310
Respuesta: Problema con scope

Por fin! Después de algo más de 3 meses, he conseguido que funcione! Como imaginaba, era un problema de llamar repetidamente a la función gradiente. Más concretamente, era problema de los parámetros. Se ejecutaba el primer gradiente bien, pero los otros al almacenarse en la cola, debían esperar. Mientrar esperaban, se generaba toda la cola, así que al llamar al siguiente paso de la cola, los parámetros objeto y opciones se habían quedado con el último valor que habían tenido, ya que como son objetos se pasan por referencia.
La solución es sencilla, clonar los objetos por cada iteración. O sea que así queda el código:
Código Javascript:
Ver original
  1. var clonar = function(obj){
  2.     var clon = {};
  3.     for(var prop in obj){
  4.      if(obj.hasOwnProperty(prop)){
  5.       clon[prop] = (function(este){
  6.        if(este[prop] instanceof Array){
  7.         return este[prop].concat();
  8.        }else if(typeof este[prop] == 'object'){
  9.         return este[prop].esElemento() || este[prop] === null ? este[prop] : este[prop].clonar();
  10.        }
  11.        return este[prop];
  12.       })(obj);
  13.      }
  14.     }
  15.     return clon;
  16.    };
  17.    
  18.    for(var i = 0, len = claves.length; i < len - 1; i++){
  19.     var objeto = clonar(obj), opciones = clonar(opc);
  20.     objeto.colores = coloresArr.slice(i, i + 2);
  21.     opciones.duracion = opc.duracion * (parseInt(claves[i + 1].lastSubstr(1)) - parseInt(claves[i].lastSubstr(1))) / 100;
  22.     este.gradiente(objeto, opciones);
  23.    }
Muchas gracias a @musterpuppet por haberme sufrido todo este tiempo, y perdón por ser tan duro de mollera y no entender tus explicaciones
De momento no puedo poner un enlace al código porque al subirlo al hosting no me lo actualiza, problemas con la caché supongo, pero en cuanto pueda edito.
Saludos y gracias de nuevo :D
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red