Ich experimentiere/lerne ClojureScript. Das folgende Code-Snippet ist mit der ausgezeichneten d3.js-Lib verbunden, um einige Kreise anzuzeigen. Finden Sie es etwas verbal, ohne auf Makros zurückgreifen zu müssen, gibt es eine Möglichkeit, es zu optimieren/zu minimieren?Würde dies als idiomatisches ClojureScript betrachtet?
(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)
)
Dank
Danke Kevin für das Feedback und geht auf C2 und d3-cljs. C2 sieht interessant aus, ich suche eine rein clientseitige Implementierung, ist das mit C2/ClojureScript möglich? – user922621
In Bezug auf den Atom für Daten, möchten Sie den Code zu einem Dashboard mit den Daten schrittweise auf den Client verschoben werden ... weiß nicht, ob Atom der richtige Ansatz ist? – user922621
Atom ist ein großartiger Ansatz für den Umgang mit Staat. Ich würde versuchen, es zu isolieren: Definieren Sie das Atom-Toplevel, aber deneferenzieren Sie es so wenig wie möglich - bevorzugen Sie, die Daten explizit über Fn-Argumente herumzugeben. –