Eksperymentuję/uczę się ClojureScript. Poniższy fragment kodu łączy się z doskonałą biblioteką d3.js, aby wyświetlić niektóre kręgi. Znajdź, że jest trochę gadatliwy, bez uciekania się do makr, czy istnieje sposób na zoptymalizowanie/zminimalizowanie tego?Czy to byłoby uznane za idiomatyczny 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)
)
Dzięki
Dzięki Kevinowi za informację zwrotną i udział w C2 i d3-cljs. C2 wygląda interesująco, szukam czysto implementacji po stronie klienta, czy można to zrobić z C2/ClojureScript? – user922621
Jeśli chodzi o Atom dla danych, chcesz ewoluować kod do deski rozdzielczej z danymi przekazywanymi do klienta stopniowo ... nie wiesz, czy Atom jest właściwym podejściem? – user922621
Atom to świetne podejście do obsługi stanu. Próbowałbym go jednak wyizolować: zdefiniuj poziom atomu, ale usuń go w jak najmniejszym stopniu - wolisz przekazywać dane w sposób jawny za pomocą argumentów fn. –