2012-04-20 10 views
8

tengo este código: bucle simple en CoffeeScript

count = $content.find('.post').length;    
for x in [1...count] 
    /* 
    prev_el_height += $("#content .post:nth-child(" + x + ")").height(); 
    */ 
    prev_el_height += $content.find(".post:nth-child(" + x + ")").height(); 

esperaba que esto se convierta en

for (x = 1; x < count; x++) { prev_el ... } 

pero se convierte en esto:

for (x = 1; 1 <= count ? x < count : x > count; 1 <= count ? x++ : x--) { 

¿Puede alguien por favor ¿explicar por qué?

EDITAR: ¿Cómo obtengo la sintaxis esperada para la salida?

Respuesta

22

En CoffeeScript, debe utilizar la palabra clave by para especificar el paso de un ciclo. En su caso:

for x in [1...count] by 1 
    ... 
3

Usted está pidiendo que bucle desde 1 a count, pero estás asumiendo que siempre habrá count-mayor que o igual a uno; el código generado no hace esa suposición.

Así que si count es> = 1, entonces el contador del bucle se incrementa cada vez:

Pero si count es < 1, entonces el contador del bucle se decrementa cada vez:

for (x = 1; x > count; x--) { /* ... */ } 
+0

gracias por expresar el problema ... – OZZIE

2

Bueno , quiere x para ir del 1 al count. El código está comprobando si count es más grande o más pequeño que 1.

Si count es mayor que 1, entonces tiene que incrementox si bien es más pequeño de count.

Si count es menor que 1, entonces tiene que disminuir x si bien es grande de count.

+0

gracias por expresar el problema ... – OZZIE

+1

Su pregunta original fue ** ¿POR QUÉ? ** – Shahbaz

+0

Sí, me doy cuenta de eso, pero pensé que la gente también proporcionaría la solución, pero gracias:) Te di +1 ahora de todos modos :) – OZZIE

0

Para futuras consultas:

$('#content .post').each -> 
    prev_el_height += $(this).height() 

tiene el mismo efecto, suponiendo :nth-child es equivalente a .eq() y x ir más allá del número de los elementos es un error tipográfico.

+0

Eso no es lo que estoy haciendo, estoy agregando cada altura de div.post a la variable prev_el_height que es única para cada div.post ... Sé que no es óptimo para buscar para cada div en cada vuelta y estoy buscando encontrar una solución en este momento ... – OZZIE

+0

Hice una variable de contenido $ ahora e hice: 'prev_el_height + = $ content.find (". publicación: nth-child ("+ x + ")").height(); ' en su lugar! – OZZIE

+0

@OZZIE ah, esa var no está visible en el código que ha publicado. Es una buena mejora, también puedes guardar la colección '.post' y luego filtrarla. –