Hi all,
I’ve just released v0.1.0 of ‘Flow’ - a new library to help you write
dynamic ClojureScript applications in a simple, declarative style.
Fundamentally, it does this by extending the behaviour of Clojure’s let and
for constructs to handle changing inputs, but allowing you to write pure,
value → value functions as you would if the inputs were static.
For example, if you were to design an counter widget based on a static
counter value, you might write something like:
(:require-macros [dommy.macros :refer [node]])
(defn counter-widget [counter]
(node
[:p "The counter is currently at " counter]))
To make this dynamic, using Flow, we’d write something like:
(:require [flow.core :refer-macros [el<< let<<]])
(defn counter-widget [counter-atom]
(el<<
(let<< [counter (<< counter-atom)]
(node
[:p "The counter is currently at " counter]))))
I would probably read this function as:
given that counter comes from (<<) counter-atom, give me a dynamic element
that reads “The counter is currently at <counter>”
Flow also has a for<< macro, with predictable semantics. Assuming I have a
contact list atom containing
[{:first "Rich"
:last "Hickey"}
{:first "Martin"
:last "Odersky"}
{:first "James"
:last "Gosling"}]
if you’d write this statically as:
(defn contacts-widget [contacts]
(node
[:ul
(for [{:keys [first last]} (sort-by :last contacts)]
(node
[:li last ", " first]))]))
then you can render this as a dynamic widget with the following Flow code:
(:require [flow.core :refer-macros [el<< for<<]])
(defn contacts-widget [contacts-atom]
(node
[:ul
(el<<
(for<< [{:keys [first last]} (sort-by :last (<< contacts-atom))]
(node
[:li last ", " first])))]))
Flow will then update the contact list whenever the contacts atom is
changed.
I’d be grateful of any feedback/suggestions you have - please let me know,
either on here, on GitHub <https://github.com/james-henderson/flow> or
@jarohen <https://twitter.com/jarohen>.
Thanks!
James
--
Note that posts from new members are moderated - please be patient with your
first post.
---
You received this message because you are subscribed to the Google Groups
"ClojureScript" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/clojurescript.