Thanks, multiple roots works well for this. Being new to Om it simply didn't 
occur to me. 

I'll dig further into coordinating events with shared channels; it would be 
interesting to come up with a pattern that works for multiple unrelated modals. 
In the meantime I posted an updated example linked below that simply uses a 
callback to share state. (I did stumble into accessing a cursor outside of the 
rendering cycle and don't have a great solution to that, but the code below 
works and is at least modular.)

Multi-root version of the previous code with update support:

https://github.com/rbrush/cljs-playground/blob/master/src/main/clojurescript/toomuchcode/playground/modal_multiroot.cljs

I appreciate it!

-Ryan

On Tuesday, August 26, 2014 11:27:12 AM UTC-5, David Nolen wrote:
> Om supports multiple roots obviating the need for a parent. Is there
> 
> any reason to not put all modals into a different root? As far as
> 
> communication seems like you could coordinate events via a :shared
> 
> channel.
> 
> 
> 
> HTH,
> 
> David
> 
> 
> 
> On Tue, Aug 26, 2014 at 11:03 AM, Ryan Brush  wrote:
> 
> > Hello all,
> 
> >
> 
> > I'd like to improve on a simple pattern for reusable modals in Om. The 
> > example code linked below at [1] works, displaying a person details modal 
> > as expected. However, it has some downsides. Specifically, the 
> > "person-details-modal" component must be given the state of the 
> > higher-level component that creates it, and it must know the key in which 
> > its state exists so it can update it.
> 
> >
> 
> > We can work around this if we pass "on close" callbacks to the modal 
> > component, and remove its state in the parent. But that leaks details in 
> > the opposite direction, where the caller of a modal has to know how to 
> > close it.
> 
> >
> 
> > Can we make this code cleaner? Realizing this could be a challenge in the 
> > context of Om's strong state management, it would be nice to write 
> > something like this:
> 
> >
> 
> > (defn show-person-details-modal! [person-details] ...)
> 
> >
> 
> > that could be attached to the on-click event of a parent component. It's 
> > not clear to me how we could achieve that, or if it's possible. Any other 
> > suggestions to work around the above drawbacks are also welcome. I'd love 
> > to see how this is handled in existing Om-based projects.
> 
> >
> 
> > If anyone wants to experiment with this example, simply cloning the project 
> > below and launching "lein run" will open a page with this example.
> 
> >
> 
> > Many thanks!
> 
> >
> 
> > -Ryan
> 
> >
> 
> > [1]
> 
> > https://github.com/rbrush/cljs-playground/blob/master/src/main/clojurescript/toomuchcode/playground/modal.cljs
> 

-- 
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