Roku Developer Program

Join our online forum to talk to Roku developers and fellow channel creators. Ask questions, share tips with the community, and find helpful resources.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
philotas
Roku Guru

call component function only possible via interface?

When a component defines some function via <source> tag or inline. How can I call a function of the script in the context of the component?

Seems I can only do that by changing an interface fiel and register an onChange callback, correct?
0 Kudos
3 REPLIES 3
philotas
Roku Guru

Re: call component function only possible via interface?

anybody?
0 Kudos
RokuJoel
Binge Watcher

Re: call component function only possible via interface?

I think you mean the <script> tag, and you should be able to call any of the functions in an included .brs file in your init, and while an observed field is, I think, necessary to initially call a function within an included file, I believe that called function should be able to call anything else within files included via the script tag. So if your onChange callback is a function named "DoSomething" -

function DoSomething()
print "something"
doSomethingElse()
end function

function DoSomethingElse() as integer
print "something else"
return -1
end function


Joel
0 Kudos
philotas
Roku Guru

Re: call component function only possible via interface?

Hi Joel,
thanks for your answer, but that was not, what I meant:

Let's take this example script of a Vd


<Video
id="musicvideos"
width="1280"
height="720"
translation="[0,0]"
/>

<script type="text/brightscript" >
<![CDATA[

sub init()
m.top.setFocus(true)
setVideo()
end sub

function setVideo() as void
videoContent = createObject("RoSGNode", "ContentNode")
videoContent.url = "https://roku.s.cpl.delvenetworks.com/media/59021fabe3b645968e382ac726cd6c7b/60b4a471ffb74809beb2f7d5a15b3193/roku_ep_111_segment_1_final-cc_mix_033015-a7ec8a288c4bcec001c118181c668de321108861.m3u8"
videoContent.title = "Test Video"
videoContent.streamformat = "hls"

m.video = m.top.findNode("musicvideos")
m.video.content = videoContent
m.video.control = "play"
end function

]]>
</script>



My question is, whether I can call setVideo() from somewhere else then the init() or an onChange-Callback which changes, when the intefacefield changes.

So instead of this:

node.myInterfaceField = {url: ....} ' // trigger setVideo


do this:


node.setVideo({url: ....}) ' //


I am probably talking about having "interface functions".
at the moment it seams I have to have interface fields in order to trigger functions..
0 Kudos