Roku 中的全局阵列访问

Array Access Globally in Roku

我在 Roku 中创建了一个全局节点,如 m.global = screen.getGlobalNode() 并在 xml 文件中添加接口标签,如下所示。

<interface>
    <field id="GlobleURL" type="array"/>
</interface>    

我直接在brs文件中使用m.top.GlobleURL.Push("Nik's")它会产生错误。他们对此有什么解决方案吗?

正如SDKDocs所说,getGlobalNode() returns 一个已经静态创建的节点。您不能创建自己的全局节点,然后使用 getGlobalNode() 获取它。 如果您想从任何地方访问它,您可以通过 getGlobalAA().global.

获取它

正在为数组赋值--

在您的情况下,您很可能会收到错误“Interface not a member of BrightScript Component”。由于试图将元素推送到长度未定义的数组,您正面临此问题。所以试试

m.top.GlobalURL = ["Nik's"]

而不是“Push()”函数。

或者, 如果您想使用“Push()”函数,或者您的代码中有任何动态添加值的依赖项到数组,您可以在“**.brs*”文件中尝试以下方法--

m.GlobalURL = createObject("roArray", 2, true) ' 2 is initial size of array, and "true" defines that array can be resized to accommodate more elements as and when required
m.GlobalURL.Push("val1")
m.GlobalURL.Push("val2")
m.GlobalURL.Push("val3")

在此之后将“m.GlobalURL”分配给“m.top.GlobalURL”作为--

m.top.GlobalURL = m.GlobalURL

如上一个回答中所述,您无法创建自己的全局节点,这不足以全局访问数组。

全局访问数组--

要全局访问数组,请尝试这样的操作--

m.global = screen.getGlobalNode()
  m.global.addFields({  
  GlobalURL : [],  
  })

每当您的代码修改“m.top.GlobalURL”时,添加以下代码以更新全局数组中的值-

m.global.AddReplace("GlobalURL" ,m.top.GlobalURL)

之后,您可以在应用程序的任何位置访问“GlobalURL”数组--

m.global.GlobalURL

希望这会有所帮助。