Passing Data from main.brs

Does anyone know how to pass data from main.brs to the scene components?

I tried m.global and got an error.

Thanks!

m.global = screen.getGlobalNode()
  m.global.AddField("token", "string", false)
  m.global.token= "thisstring"

Put this in Main.brs and it should be available everywhere.

awesome. I didn’t realize that you need to associate it with the screen.

I stumbled across the same issue, but I couldn’t make it work.
This is what I put in the main.brs

sub RunUserInterface() 

    user_id = regread("id","user_data")
    user_sub = regread("sub","user_data")
    ?user_id
    ?user_sub
    
    m.global = screen.getGlobalNode()
    m.global.AddField("userId", "string", false)
    m.global.AddField("subscription", "string", false)
    m.global.userId = user_id
    m.global.subscription = user_sub
    ? "User sub global = " + m.global.userId
     
    if user_id <> invalid then
       ShowContens(invalid)
    else
        ShowLogin(invalid)
    end if    
    
end sub

And I got this error here in the console:

BrightScript Micro Debugger.
Enter any BrightScript statement, debug commands, or HELP.

Current Function:
004: sub RunUserInterface()
005:
006: user_id = regread(“id”,“user_data”)
007: user_sub = regread(“sub”,“user_data”)
008: ?user_id
009: ?user_sub
010:
011:* m.global = screen.getGlobalNode()
012: m.global.AddField(“userId”, “string”, false)
013: m.global.AddField(“subscription”, “string”, false)
014: m.global.userId = user_id
015: m.global.subscription = user_sub
‘Dot’ Operator attempted with invalid BrightScript Component or interface reference. (runtime error &hec) in pkg:/source/main.brs(11)
011: m.global = screen.getGlobalNode()
Backtrace:
#0 Function runuserinterface() As Void
file/line: pkg:/source/main.brs(11)
Local Variables:
global Interface:ifGlobal
m roAssociativeArray refcnt=2 count:0
user_id roString (2.1 was String) refcnt=1 val:"test@example.com"
user_sub roString (2.1 was String) refcnt=1 val:“False”
screen
Any ideas?

If “screen” doesn’t exist then you can’t access it – create the scene first, then create a screen, and there you go.

or instead of using global, add the field to your component’s interface and you can pass data to the component into that field.

In component

<interface>
<field id="YourNewField" type="assocarray" onChange="myFunctionThatDoesSomething"/>
</interface>

choose “type” that makes sense. Then in main,

comp = m.top.findnode("componentID")  (or probably you already have a handle to it)
comp.YourNewField = Data of the correct type Passed in to new field and seen by component via m.top.YourNewField

As I understand this is less “expensive” and if you don’t need the data globally, is the best practice. Although I could be wrong about the expense…?

Oh god… I missed that completely. I created the scene first and it solved the issue.
It now works properly.

Thanks!!