2011-09-15 5 views

Respuesta

20

El javascript original podría (o debería) se escribe así:

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

por lo

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

una versión más legible podía mira esto:

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 for $(). Each :) ('.html i + 1 for field in fields' no es * that * más legible;) Haría' .html (i + 1) 'al menos) – arnaud576875

+0

me gusta el último, pero voy a decir todo y lo hago '... para el campo en $ ('.anted-fields')'. Y acepto con @arnaud que '.html (i + 1)' es más fácil de leer. –

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

(Este itera sobre la matriz con un for (;;) de bucle.)

O si desea utilizar $ .Cada:

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

BTW el título es un poco incorrecto; debe ser cómo escribir este Javascript en CoffeeScript;)

0

Personalmente me gusta el for .. in .. de coffeescrip pero era aburrido utilizando la siguiente estructura para que el iterador como jQuery objeto:

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

Así que define un artículo en función disponible para cada objeto jQuery:

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

Ahora la navegación con CoffeeScript es más simple:

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