javascript - mbostock - d3.js sunburst
Controladores de Coffeescript jQCloud (1)
Estoy tratando de hacer esto en coffeescript,
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.