Leaving aside the irrelevant details of creating an absolutely
positioned widget of some sort, here's how I would create a component
which keeps track of window resizing events.  It's very simple and
doesn't require anything other than default local state:

https://github.com/ddellacosta/om-resize-listener/blob/master/src/om_resize_listener/core.cljs

I didn't bother to add IWillUnmount for un-listening to resizes, but
obviously that's no big deal to add.

DD

(2014/06/23 12:36), Mike Thompson wrote:
> On Monday, June 23, 2014 1:10:39 PM UTC+10, Mike Thompson wrote:
>> On Monday, June 23, 2014 11:59:45 AM UTC+10, David Della Costa wrote:
>>>> itself in the right absolute position if the window resizes).  Its
>>>
>>>> not that you can't do this in OM, of course, but, as I understand it,
>>>
>>>> you'd have to merge the window dimensions into the main atom, and
>>>
>>>> meaning the "reusable" popup component would require that every
>>>
>>>> app-state had these window dimensions at the same place (cursor).
>>>
>>>> Feels a bit hacky to me.  (If I've lead you astray here, and there's
>>>
>>>> a better way to create such a reusable component in OM, I hope
>>>
>>>> someone will correct me.)
>>>
>>>
>>>
>>> Each Om component has local component state, just as in React.  You
>>>
>>> certainly don't have to merge everything into the global app data as you
>>>
>>> describe, and UI concerns like this are exactly the use-case for local
>>>
>>> state.  This is all described in the tutorials and docs.
>>>
>>>
>>>
>>> https://github.com/swannodette/om/wiki/Documentation
>>>
>>
>> Yes, I've found myself crawling over those docs a few times.  :-)
>>
>> So, if I understand you correctly ... to create a reusable, absolutely 
>> positioned popup component, you are suggesting something like this: 
>>    - in IDidMount, hook the window or <body> for "onresize" events
>>    - in IWillUnmount, unhook the listener on the way out. 
>>    - when a resize event comes through, use "setState!".  Does this trigger 
>> a re-render of the component? 
> 
> Hmm.  That 3rd step should use updateState! (not setState!).  And I can now 
> see that it does cause a re-render. 
> 
> Am I on the right track here?
> 
> --
> Mike
> 
> 
> 

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