2011-09-15 17 views

risposta

20

Il javascript originale potrebbe (o dovrebbe) essere scritto in questo modo:

$('.nested-fields').each(function(i){ 
    $(this).find('.set').html(i+1) 
}) 

così

$('.nested-fields').each (i) -> 
    $(this).find('.set').html i+1 

una versione più leggibile possibile assomiglia a questo:

fields = $('.nested-fields') 

for field, i in fields 
    set = $(field).find('.set') 
    set.html i+1 

o

$(field).find('.set').html i+1 for field in fields 
+0

nice catch per $(). Each :) ('.html i + 1 per campo in campi' non è * che * più leggibile;) Vorrei fare' .html (i + 1) 'almeno) – arnaud576875

+0

mi piace l'ultimo, ma direi tutto e renderlo '... per il campo in $ ('. nested-fields')'. E sono d'accordo con @arnaud che '.html (i + 1)' è più facile da leggere. –

3
for field, i in $(".nested-fields") 
    $(field).find('.set').html(i+1) 

(Questo itera oltre la matrice con un for (;;) ad anello.)

Oppure, se si desidera utilizzare $ .each:

$.each $(".nested-fields"), (i) -> 
    $(this).find('.set').html(i+1) 

BTW il titolo è un po ' non corretta; dovrebbe essere come scrivere questo javascript nel CoffeeScript;)

0

Personalmente mi piace la for .. in .. di coffeescrip ma mi era noioso utilizzando la seguente struttura per avere l'iteratore come JQuery oggetto:

for td in $('td.my_class') 
    $td = $(td) 
    .. 

Così ho funzione definita a disposizione un articoli a ciascun oggetto JQuery:

$.fn.items = -> $.map(this, $) 

Ora la navigazione con CoffeeScript è più semplice:

for $td in $('td.my_class').items() 
    $td <-- is a JQuery object 
Problemi correlati