Erm, too much text? I'm just wondering if anyone knew how a component using a 
cursor created with nil could still render properly (sometimes).

Matthew

On Friday, September 12, 2014 6:40:11 PM UTC-4, Matthew Davidson wrote:
> Hi, everyone!
> 
> I have an Om problem, and I've looked all over the list archives and the 
> documentation, but haven't been able to find an explanation. I *think* it's 
> related to how cursors masquerade as/are constructed from vectors/maps, but 
> perusing om/core didn't reveal anything immediately.
> 
> I've created a minimal test case to illustrate the problem. Basically, I have 
> an indexed cursor being created from app-state with nil as the index "(get 
> app-state nil)", which is then passed down. I would typically expect some 
> sort of failure to render, but my particular code path happened to render ok, 
> and I only found out the cursor was invalid after much-delayed weirdness with 
> channels and transact!.
> 
> In one code path, it fails with an object identifier of some sort, but in 
> another, it renders perfectly. If the items-view function calls build-all 
> with item-view itself, rendering fails, but if items-view calls 
> item-list-view, which then calls build-all with item-view, it succeeds!
> 
> The whole repo is at https://github.com/KingMob/om-cursor-test, but below is 
> the relevant code. This was tested with Om 0.7.1 and cljs 2322.
> 
> Any help greatly appreciated,
> Matthew
> 
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> ; Vector of item-groups
> (def app-state 
>   (atom [{
>           :items [
>                   {:text "Alice"}
>                   {:text "Bob"}
>                   {:text "Cindy"}
>                   {:text "Dave"}
>                   ]}
>          {
>           :items [
>                   {:text "Eve"}
>                   {:text "Fred"}
>                   {:text "Gina"}
>                   {:text "Howard"}
>                   ]}]))
> 
> ; Just makes a button with text
> (defn item-view [item owner]
>   (reify
>     om/IRender
>     (render [_]
>             (dom/button nil
>                         (:text item)))))
> 
> 
> ; Somehow, by going through this function, it displays correctly
> (defn item-list-view [items owner]
>   (reify
>     om/IRender
>     (render [_]
>             (apply dom/div nil
>                    (om/build-all item-view items)))))
> 
> 
> (defn items-view [item-group owner]
>   (reify
>     om/IRender
>     (render [_]
>             (dom/div nil
>                      
>                      (dom/h3 nil "This one doesn't render a cursor involving 
> nil. Instead we get some sort of OID.")
>                      (om/build-all item-view (:items item-group)) ; seems 
> like it should be identical to call in item-list-view
> 
>                      (dom/h3 nil "Yet this one renders with what seems like 
> an identical code path!")
>                      (om/build item-list-view (:items item-group))))))
> 
> 
> (defn root-view [app-state owner]
>   (reify
>     om/IRender
>     (render [_]
>             (dom/div nil
>                      (om/build items-view (get app-state nil)) ; here, we 
> index into the vector of item-groups incorrectly, yet sometimes it renders
>                      ))))

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