So obvious. The fact that root's child was not a component cut off the 
propagation. Thanks for the help. 

On Saturday, July 19, 2014 10:49:56 AM UTC-6, Johann Bestowrous wrote:
> try changing your table component to this -> 
> 
> (defn table [app owner]
>   (reify
>     om/IRender
>     (f [data owner]
>       (let [cols (select-keys app [:cols])]
>         (dom/table nil
>                    (dom/thead nil
>                               (om/build (row-builder {} {}) app {:fn 
> extract-header-row}))
>                    (apply dom/tbody nil
>                           (for [index (range (count (:data app)))]
>                             (om/build (row-builder {}) app {:fn (partial 
> extract-row index)}))))))))
> 
> On Friday, July 18, 2014 9:54:16 PM UTC-7, Justin Reed wrote:
> > I'm having a problem with Om getting shared to propagate to child 
> > components. The shared map gets passed to the root, but children of the 
> > root get nil on a call to om/get-shared. I've tried a number of things, but 
> > have concluded it must be the way I'm calling build on the children.
> > 
> > Seems like a long shot given the google results I (haven't) found, but I'm 
> > curious if anyone else has had this problem.
> > 
> > Here's the code (it's my experiments with building up a table):
> > 
> > (defn- cell-builder [cell-props]
> >   (fn [data owner]
> >     (let [c (om/get-shared owner :click)]
> >       (reify
> >         om/IRender
> >         (render [_] (dom/td (clj->js {:onClick #(put! c {:topic :click 
> > :text (str data)})}) (str data)))))))
> > 
> > (defn- row-builder
> >   ([row-props] (row-builder row-props {}))
> >   ([row-props cell-props]
> >     (fn [row-data owner]
> >       (reify
> >         om/IRender
> >         (render [_]
> >           (let [cols (:cols row-data)
> >                 data (map #(get (:data row-data) %) cols)]
> >             (apply dom/tr (clj->js row-props)
> >               (map #(om/build (cell-builder cell-props) %) data))))))))
> > 
> > (defn- extract-row [index cursor]
> >   {:cols (mapv :key (:cols cursor))
> >    :data (get-in cursor [:data index])})
> > 
> > (defn- extract-header-row [cursor]
> >   (let [cols (:cols cursor)
> >         col-keys (mapv :key cols)
> >         display-names (mapv :display-name cols)]
> >     {:cols col-keys
> >      :data (zipmap col-keys display-names)}))
> > 
> > (defn table [app owner]
> >   (let [cols (select-keys app [:cols])]
> >     (dom/table nil
> >       (dom/thead nil
> >         (om/build (row-builder {} {}) app {:fn extract-header-row}))
> >       (apply dom/tbody nil
> >         (for [index (range (count (:data app)))]
> >           (om/build (row-builder {}) app {:fn (partial extract-row 
> > index)}))))))
> > 
> > Here's the root call from another namespace (some vars not listed here):
> > 
> > (om/root
> >   tbl/table
> >   state
> >   {:target (. js/document (getElementById "table"))
> >    :shared {:click click-pub-chan}})
> > 
> > The call to table has the shared state. The calls to both row-builder and 
> > cell-builder don't.

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