Are you able to show the exception that gets thrown? Also can you perhaps share the make-animations code? It "should" work as I pass cursors around all the time without issue... The only time this causes problems for me is if I pass it to something that gets run outside the render phase (eg js/setTimeout or putting it on a core.async channel). In these cases you use om.core/value before passing the data to these, or you deref the data on the other side (the timeout function or the go block). I prefer the first option as it means the other functions need not know about cursors. On 4 Sep 2014 02:28, "Alan Shaw" <[email protected]> wrote:
> > make-animations should be able to work with (:circles cursor) without > knowing or caring if it gets given a cursor or not - cursors are quite > transparent. > > I agree that it should be able to. However it is not doing so. > In the component where I am calling make-animations, the cursor is > (:circles cursor) of the parent component, so my call in render-state was > exactly this: > (make-animations cursor) > The error that this throws indicates I'm trying to invoke make-animations > on an actual cursor object. If I change that to > (make-animations (om/value cursor)) > it behaves as hoped. > > Once again, I don't need or want to set local state from app state. That > was just something I tried when this more straightforward approach failed. > > > On Wed, Sep 3, 2014 at 4:51 PM, Daniel Kersten <[email protected]> wrote: > >> Minor correction: did-update should be (= prev-props data). It gets the >> "old" cursor value as it's argument. >> On 4 Sep 2014 00:50, "Daniel Kersten" <[email protected]> wrote: >> >>> I went digging and the code where I set local state to cursor data was >>> actually old code and I was missremembering it :-) >>> All of my new code does actually strictly separate the two mechanisms so >>> that app state refers to the domain data (the what) and local state refers >>> to the state of widgets (the how). So there actually isn't any natural >>> overlap. >>> >>> As for Alans question, I've reread it a few times and I'm not sure I >>> understand what you're trying to achieve. >>> >>> make-animations should be able to work with (:circles cursor) without >>> knowing or caring if it gets given a cursor or not - cursors are quite >>> transparent. >>> >>> Are you trying to detect if the cursor has changed from one update to >>> the next? >>> >>> If yes then you can compare your current cursor to the previous one in >>> will-receive-props by doing (when-not (= (om.core/get-props owner) >>> next-props) (cursor-has-changed)) or in did-update using (when-not (= >>> next-props data) (cursor-has-changed)) where data is your cursor. >>> Use the former if you want to do this before render and the latter if >>> after. Note that if you modify local state in did-update you will trigger >>> a rerender potentially causing a render loop (but if you only do this when >>> your cursor data has changed, it's not a problem because the second time >>> the conditional will be false). >>> >>> Hope that helps. >>> Alan, if you haven't read this page, it's very helpful: >>> >>> https://github.com/swannodette/om/wiki/Cursors >>> >>> Jamie >>> On Sep 3, 2014, at 3:21 PM, Alan Shaw <[email protected]> wrote: >>> >>> Ahhhhhh thanks! >>> 2014/9/3 上午11:48 於 "David Nolen" <[email protected]> 寫道: >>> >>>> It is not. Use om.core/value >>>> >>>> On Wed, Sep 3, 2014 at 2:29 PM, Alan Shaw <[email protected]> wrote: >>>> > So it is OK to take (.-value cursor) in render-state? >>>> > >>>> > -- >>>> > 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. >>>> >>> >>> -- >>> 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. >>> >> -- >> 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. > -- 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.
