tutorial sunburst mbostock examples ejemplos chart javascript coffeescript visualization

javascript - mbostock - d3.js sunburst



Controladores de Coffeescript jQCloud (1)

Estoy tratando de hacer esto en coffeescript,

http://jsfiddle.net/Q6348/8/

Específicamente, estoy tratando de agregar controladores a mi jQWordCloud para obtener la etiqueta de la palabra que se hace clic en

En mi versión coffeescript

while i < @counts.length x = @counts[i] @tag_list.push text: x.label weight: x.count handlers: click: -> temp = x -> alert "it worked for " + temp.label () ++i

Obtengo un error TERMINATOR inesperado presumiblemente debido a (), pero si observas en el jsfiddle, eliminar eso rompe el controlador


El enfoque usual de CoffeeScript para este problema es usar do :

Cuando se utiliza un bucle de JavaScript para generar funciones, es común insertar un contenedor de cierre para garantizar que las variables de bucle se cierren, y que todas las funciones generadas no solo compartan los valores finales. CoffeeScript proporciona la palabra clave do , que invoca de inmediato una función aprobada, reenviando cualquier argumento.

Luego use simplemente un plano for ... in vez del ciclo while para que no tenga que ensuciar los índices; algo más como esto:

for o in stuff do (o) -> tag_list.push text: o.NAME weight: o.COUNT html: title: "#{o.COUNT} varieties" handlers: click: -> console.log("it worked for", o)

Demostración: http://jsfiddle.net/ambiguous/3W9YC/

O podrías usar una comprensión de bucle como esta:

tag_list = for o in stuff do (o) -> text: o.NAME weight: o.COUNT html: title: "#{o.COUNT} varieties" handlers: click: -> console.log("it worked for", o)

y evitar las llamadas push .

Demostración: http://jsfiddle.net/ambiguous/3W9YC/1/

Por cierto, puede usar CoffeeScript en jsfiddle.net seleccionándolo en el panel Idiomas en la barra lateral.