On Tuesday, July 14, 2015 at 6:59:14 PM UTC+3, Tyler Morten wrote:
> On Tuesday, July 14, 2015 at 4:51:15 AM UTC-5, Asher Coren wrote:
> > Hello,
> > Sometimes, when building components, they depend on internal logic that the 
> > entire app doesn't care about. For example: A toggle button that toggles 
> > display between two fields from the app-state. The status of the toggle 
> > (which of the fields is displayed) is only the concern of the toggle 
> > component.
> > I know it is possible to store this local state in the local state of the 
> > component, but is there a way to add it to the cursor of the component 
> > without changing the app-state?
> 
> I'm not an expert in Om, but I think this (toggle field state) is the perfect 
> example of what to store in the local components state and not in your 
> application state.  I suppose if you REALLY wanted to you could store this in 
> your app-state and just mutate a :selected-field...i.e. 
> 
> (defonce app-state (atom {:selected-field :first-field))
> 
> (om/update! cursor :selected-field :first-field)
> or
> (om/update! cursor :selected-field :second-field)
> 
> In the render function, you can select what field is visible via display 
> helper function:
> (dom/input #js {:style (display cursor :first-field} "Field #1")
> (dom/input #js {:style (display cursor :second-field} "Field #2")
> 
> (defn display [cursor field]
>   (if (= (:selected-field cursor) field) 
>     #js {}
>     #js {display: "none"}))
> 
> I think this would work...is this what you were thinking?
> Tyler

Your idea for storing it permanently in the app state will work, but it doesn't 
look natural to have such a local field in the app state. I'm looking for a way 
to inject it in to the app state only when viewing that component.

A note about your implementation: Your `display` function is not necessary. 
There's no need to add a `display` property to the field; Simply build the 
required component according to the state:
(dom/input nil selected-field)

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