I think all of these options are acceptable. I honestly don't see a problem with pre-rendering on the server (something that stills needs a bit of work) and fetching the app state in separate XHR.
David On Sun, Feb 9, 2014 at 2:16 PM, Mike Haney <[email protected]> wrote: > I'm working on a webapp prototype for a customer. The stack will be > Clojure top to bottom - Datomic for the data layer, > Ring/Compojure/Liberator for the server, and Clojurescript/Om on the client. > > It would be highly desirable to dynamically initialize the (client side) > application state when the page is initially built on the server. > > Example - user has bookmarked some url like '/myapp/workorders?current'. > On the client side, the workorder data is stored in an atom, and the > presentation of the data is rendered by Om components. The naive approach > would be what you see in all the simple Om examples - start with an empty > atom and then when the app loads and detects the '?current' param, updates > its state by issuing an XHR call back to the server. Of course, this is > wasteful, since presumably we had access to that state when the page was > initially rendered, so we might as well try to utilize it. > > One way I've seen this done before with other JS frameworks is using HTML > <pre> tags, e.g. render the state into a <pre> tag, then suck the data in > during initialization. This seems kind of clunky to me. > > A similar option would be to dynamically generate a <script> tag that just > creates the JS data structures (arrays and maps/objects). Then the app > when it initializes could either 1) read the JS data and use it to build > the app state or 2) just wrap the JS data in an atom and use it for the app > state. The second option would be easier, but you give up having immutable > data structures underlying your app data, so option 1 seems the better way > to go. > > Am I on the right track here, or are there better ways to accomplish this? > > -- > 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. > -- 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.
