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.

Reply via email to