Estoy experimentando/aprendiendo ClojureScript. El siguiente fragmento de código interactúa con la excelente d3.js lib para mostrar algunos círculos. Encontrar que es un poco detallado, sin recurrir a macros, ¿hay alguna forma de optimizarlo/minimizarlo?¿Esto se consideraría idiomático ClojureScript?
(def rdata (atom (array 3 10 12 16 19)))
(defn update []
(let [em (.selectAll (.select js/d3 "svg") "circle")
data (.data em @rdata d3/String)
enter (.append (.enter data) "circle")
yscale (.linear (. js/d3 -scale))
xscale (.linear (. js/d3 -scale))
rscale (.linear (. js/d3 -scale))
]
(-> yscale
(.domain (array 0 20))
(.range (array 100 200)))
(-> xscale
(.domain (array 0 20))
(.range (array 100 800)))
(-> rscale
(.domain (array 0 20))
(.range (array 50 100)))
(-> enter
(.attr "cx" xscale)
(.attr "cy" yscale)
(.attr "r" rscale)
(.style "fill" "steelblue")
(.style "stroke" "black")
(.style "stroke-width" "2")
)
)
(.info js/console "rdata: " @rdata)
)
Gracias
Gracias Kevin por los comentarios y se dirige a C2 y d3-cljs. C2 parece interesante, estoy buscando una implementación puramente del lado del cliente, ¿es posible hacer esto con C2/ClojureScript? – user922621
En cuanto a Atom para datos, desea evolucionar el código a un panel con los datos que se envían al cliente de forma incremental ... ¿no sé si Atom es el enfoque correcto? – user922621
Atom es un gran enfoque para manejar el estado. Sin embargo, trataría de aislarlo: defina el átomo hacia arriba, pero desreferencia lo menos posible, prefiera pasar los datos explícitamente a través de argumentos fn. –