Roku Developer Program

Developers and content creators—a complete solution for growing an audience directly.
cancel
Showing results for 
Search instead for 
Did you mean: 
georgejecook
Level 7

Unbelievable issue with accessing node as field of other node

I have a node with a field type like this

<fields>
<id="[size=85][font=monospace]colors[/font][/size]" type="node"> 



which holds another node described as

<?xml version="1.0" encoding="UTF-8"?>
<component
    name="ColorsContent"
    extends="ContentNode"



I can print out this node as follows

 m.top.content.colors



and get


<Component: roSGNode> =
{
    change: <Component: roAssociativeArray>
    focusable: false
    focusedChild: <Component: roInvalid>
    id: ""
    backgroundColor: "#e5e4e5"
    fadeOverlayStyle: "verticalGradient"
    progressBarBackgroundColor: "#000000BB"
    progressBarColor: "#ffc706"
    textColor: "#313131"
    tileColor: "#003d8d"
}



but if I access any properties, I get an error.. w.. t.. h.. 


 ? m.top.content.colors.id
BRIGHTSCRIPT: ERROR: roSGNode.<lookup>: RoSGNode instance of subtype ColorsContent is inaccessible from render thread
invalid
George Cook
https://linkedin.com/in/georgejecook/
Roku developers slack group (http://tiny.cc/nrdf0y) : georgejecook

Contact me on roku developer slack group, or via pm to discuss consultancy/work opportunities/rooibos unit testing framework
0 Kudos
1 Reply
georgejecook
Level 7

Re: Unbelievable issue with accessing node as field of other node

Okay, after speaking with a roku guy, this does look like a bug.

I've tested a workaround.

if you have node fields, then add them as children also
once you pass the thread boundary, remove the duplicate child - your node field will now work

I have an elegant way of doing this with a base contentnode class, which has nodeFieldNames array and hasNodeFields bool fields declared
when I create my nodes in my background task, my node factory adds the contentnode fields as children, and sets the nodeFieldNames and hasNodeFields values via a WorkAroundNodeRendesvouBug method

on the other side, I then iterate over the node graph, and remove all children that correspond to contentNodeFields, on all nodes that have hasNodeFields set to true

I can do this easily and without much fuss becauseI have a framework for processing my json into nodes, and for returning my contentNodes back to RSG.

I can't share exact code, because it belongs to my client Smiley Wink

Good luck peeps
George Cook
https://linkedin.com/in/georgejecook/
Roku developers slack group (http://tiny.cc/nrdf0y) : georgejecook

Contact me on roku developer slack group, or via pm to discuss consultancy/work opportunities/rooibos unit testing framework
0 Kudos