You can have multiple modals target the same root DOM target - om.core/root was designed for this. The accessing cursors outside the render phase is not a problem specific to this discussion. Just don't put cursors onto channels - deref before you put! onto a channel.
David On Tue, Aug 26, 2014 at 2:16 PM, Ryan Brush <[email protected]> wrote: > 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. -- 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.
