You can't close over the owner objet of a parent from within a subcomponent.
That is because there is no guarantee that the subcomponent re-renders when the
parent owner object is replaced.
One solution would be to pass a callback handler to the subcomponent, e. g.
have a subcomponent
(fn [{:keys [on-change option]} owner]
(reify
...........
:onChange (f [e] (let [new-value ...
...
(on-change new-value)))))
And call (om/update-state! ) within passed on-change. Notice that using this
approach, when the parent owner changes, the passed on-change fn also changes
which will lead to your subcomponent being recalculated with it, even if option
didn't change. Which is what you want.
A faster workaround is to not create a subcomponent in the first place.
om/IRenderState
(render-state [this state]
(apply dom/span nil
(map
(fn [option]
(dom/label nil option
....
:onChange (fn [e] ;; happily close over owner here...
...
Should suffice.
--
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.