Hello
Recently i was experimenting with Clojure and web stack and created kind of 
non-standart web app. It doesn't use routing there are no any urls there.
This app is mostly "One page apps". Instead of routes i used id's and 
classes.
Let me explain:
I used "Noir" and "fetch" libs and logic of interaction was something like 
this:


User clicks link with some id -> i bind this even to js/cljs function -> 
this function calls function on the server
 -> that returns appropriate HTML code -> cljs function inserts that code 
at right place in the page.

Function on the server calls controller function -> controller function 
gets data and insert that data into the template -> and returns HTML code 
as string


app.cljs file
-------------------------
(defn show-user-info [mid e]
  (prevent e)
  (let [a (attr ($ mid) :profile)]
    (.dialog ($ "#user-info-box") "open")
    (remote (show-user a) [result]
      (inner ($ "#user-info-box") result)))
  )

This method calls show-user function on the server and send it appropriate 
arguments.

main.clj file on the server
--------------------------
;Show user profile info

(defremote show-user [a]
  (pa/user-profile-pa a)
  )

This function returns HTML code as a string

partials.clj file
----------------------------------
(defpartial user-profile-pa [uid]
  (map user-profile-box (mprof/get-profile uid))
    )

This function joins data and template via *map* function. It is something 
like controller.

user-profile-box is a template like so:
------------------------
(defpartial user-profile-box [{:keys [uname city site business profimg age 
f1]}]
  [:ul
    [:li 
        [:img {:src profimg }]]
    [:li (str "Name: " uname)]
    (if city [:li (str "City: " city)])
    (if business [:li (str "Business: " business)])
    (if site [:li (str "Site: " site)])
    (if age [:li (str "Age: " age)])
  ]
)
This partial gets data from (mprof/get-profile uid) call


I found this approach pretty insteresting and simple though it's not mature 
and can be improved a lot. What you think about that ?

I've seen this approach in Lift - scala framework and something like this 
is implemented in Meteor.

-- 
-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to