2012-04-20 20 views
8

ho questo codice: semplice loop in 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(); 

mi aspettavo questo per trasformarsi in

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

ma si trasforma in questo:

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

Può qualcuno si prega di spiega perchè?

MODIFICA: come si ottiene la stampa della sintassi prevista?

risposta

22

In CoffeeScript, è necessario utilizzare la parola chiave by per specificare il passo di un ciclo. Nel tuo caso:

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

Si sta chiedendo di passare da 1 a count, ma si presume che count sarà sempre maggiore di o uguale a uno; il codice generato non fa quella supposizione.

Quindi, se count è> = 1, allora il contatore del ciclo viene incrementato ogni volta:

Ma se count è < 1, allora il contatore del ciclo viene decrementato ogni volta:

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

grazie per aver segnalato il problema ... – OZZIE

2

Bene , si desidera x passare da 1 a count. Il codice è controllando se count è più grande o più piccolo di 1.

Se count è maggiore di 1, allora deve incrementox mentre è minore di count.

Se count è minore di 1, allora deve decrementarex mentre è grande di count.

+0

grazie per aver segnalato il problema ... – OZZIE

+1

La tua domanda era originariamente ** PERCHÉ? ** – Shahbaz

+0

Sì, mi rendo conto che, ma anche se la gente avrebbe fornito la soluzione, ma grazie:) Ora ti ho dato +1 ora :) – OZZIE

0

di riferimento futuro:

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

ha lo stesso effetto, assumendo :nth-child è equivalente a .eq(), e x superando il numero di elementi è un errore di battitura.

+0

Questo non è quello che sto facendo, sto aggiungendo l'altezza di ogni div.post alla variabile prev_el_height che è unica per ogni div.post ... So che non è ottimale per la ricerca per ogni div ogni singolo giro e sto cercando di trovare una soluzione in questo momento .. – OZZIE

+0

Ho fatto una variabile $ content ora e ho fatto: 'prev_el_height + = $ content.find (". post: nth-child ("+ x + ")").height(); ' invece! – OZZIE

+0

@OZZIE ah, che var non è visibile nel codice che hai postato. È un buon miglioramento, potresti anche salvare la raccolta '.post' e poi filtrarla. –