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.

Reply via email to