Just for other people that may end up at the same situation, in my case
here I mitigated it with events.

In my youtube case the time when the player is available is actually some
point in future after the elements are rendered, so what I did was to
create a new event `on-player-ready`, so at the parent I listen to that
event and capture the player instance (in this case, not the ref, but the
direct Youtube iFrame API player object), so that way I can work on the
player operations.

But would still find useful to know a way to capture a reference for an Om
built element somehow.

Thanks.

On Mon, Jun 8, 2015 at 2:14 PM Wilker <wilkerlu...@gmail.com> wrote:

> Yeah, I just can't find an easy way to point to that specific element,
> this is what my parent component look like:
>
> (defn player [data owner]
>   (reify
>     om/IDisplayName
>     (display-name [_] "MusicoucherPlayer")
>
>     om/IInitState
>     (init-state [_] {:position 0 :playing false :yt-state
> yt/YT_PLAYER_STATE_UNSTARTED})
>
>     om/IRenderState
>     (render-state [_ {:keys [position] :as state}]
>       (dom/div nil
>         (dom/div nil "STATE: " (:yt-state state))
>         (if (playing? state)
>           (dom/div nil position)
>           (dom/div nil "Paused"))
>         (dom/button #js {:onClick #(play owner)} "Play")
>         (dom/div nil
>           (om/build youtube-player (assoc (select-keys data #{:width
> :height :video-id})
>                                      :player-vars {:controls 0}
>                                      :on-state-change
> #(player-state-changed owner %)
>                                      :on-time-update #(player-time-update
> owner %))))))))
>
> So, since I have a bunch of elements, how do I target that youtube-player
> specifically? I could use the findRenderedDOMComponentWithClass from
> TestUtils (although I'm not even sure what to pass as the class here), and
> that doesn't sound a good solution (also I think would be very slow).
>
> So, I don't see how the parent owner can help me on this issue, can you
> please clarify?
>
> Thanks.
>
> On Mon, Jun 8, 2015 at 2:09 PM David Nolen <dnolen.li...@gmail.com> wrote:
>
>> You can always use the React component API directly through `owner` if
>> you must.
>>
>> David
>>
>> On Mon, Jun 8, 2015 at 12:54 PM, Wilker <wilkerlu...@gmail.com> wrote:
>>
>>> Hi
>>>
>>> I'm creating a video player that wraps the Youtube player API, and I'm
>>> creating it in 2 layers (one layer just does with Youtube internals, and
>>> this one is used by another one that has the controls).
>>>
>>> On the parent component (the one with the controls) I need to access the
>>> owner of the youtube player component, I just can't figure out how to add a
>>> ref using om/build
>>>
>>> (om/build youtube-player {:video-id "abcd..." :ref "player"})
>>>
>>> The code above doesn't work (since that map is a data and not the props
>>> of the component).
>>>
>>> There is anyway to reference a component built with om/build? I really
>>> need that in order to control the player (so I can call the Youtube api to
>>> do play/pause/stop/etc...)
>>>
>>> Thanks.
>>>
>>  --
>>> 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 clojurescript+unsubscr...@googlegroups.com.
>>> To post to this group, send email to clojurescript@googlegroups.com.
>>> 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 clojurescript+unsubscr...@googlegroups.com.
>> To post to this group, send email to clojurescript@googlegroups.com.
>> 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 clojurescript+unsubscr...@googlegroups.com.
To post to this group, send email to clojurescript@googlegroups.com.
Visit this group at http://groups.google.com/group/clojurescript.

Reply via email to