No sé si llamar a este anidando es correcto o no? Pero sé que no es un buen código para tener muchas funciones dentro de los demás. La mayoría de los métodos jQuery tienen función de devolución de llamada que podemos poner nuestras devoluciones de llamada allí. Pero cuando hacemos devoluciones de llamada dentro de otra devolución de llamada y continuamos esto y vamos más y más profundo parece que el código se vuelve menos legible y quizás menos depurable.¿Cómo prevenir el código jQuery de demasiadas funciones de anidamiento?
Por ejemplo, si quiero hacer algunas animaciones una detrás de otra, tengo que llamar a cada animación que quiero que aparezca después de otra en su función de devolución de llamada. Se irá profundizando en la función de devolución de llamada. Mira este ejemplo (fiddle):
$('#t').animate({height: 400}, 500, function(){
$(this).animate({height: 200}, 500, function(){
$(this).animate({width: 300}, 500, function(){
$(this).animate({height: 300}, 500, function(){
$(this).animate({'border-radius': '50px'}, 500, function(){
//and so on...
});
});
});
});
});
para hacer una animación de 5 pasos que tengo que hacer una pila de llamadas de 5 niveles. ¿Entonces mi pregunta es cómo evitar esto? Tuve el mismo problema en mis funciones de Node.js también.
Actualización: Sé que la función jQuery tiene la función de lomo, pero eso no resuelve el problema. porque no puedes hacer algo en el medio de la cadena. Se podría escribir por encima de código como $(selector').animate().animate()...
pero no se puede hacer igual para esto:
$('#t').animate({height: 400}, 500, function(){
console.log('step 1 done: like a boss');
$(this).animate({height: 200}, 500, function(){
console.log('step 2 done: like a boss');
$(this).animate({width: 300}, 500, function(){
console.log('step 3 done: like a boss');
$(this).animate({height: 300}, 500, function(){
console.log('step 4 done: like a boss');
$(this).animate({'border-radius': '50px'}, 500, function(){
//and so on...
});
});
});
});
});
La solución ideal sería un código como el siguiente:
$(selector).doQ(anim1, anim2, myfunc1, anim3, myfunc2)...
Pero, lamentablemente jQuery no tienen una API como este (que yo sepa).
No creo que haya un problema con las funciones de anidamiento como esa. – Nathan
@Nathan: ¿De verdad? Intenta depurar, mantener y leer el código que está anidado tan profundo. –
@Andrew Quiero decir, creo que funcionará. Pensé que estaba preguntando si es correcto o no. Y sí, es muy difícil de depurar, leer y mantener. – Nathan