如何使用 Brightscript 访问另一个文件标签?

How to Access another file Label using a Brightscript?

我正在尝试简单的导航。而且我尝试了不止一种打开另一个屏幕的方法。

  1. Hide/show 概念(但它只适用于单个文件)。
  2. 使用视图堆栈(但仍然无法正常工作)
  3. 使用标签并在标签内调用另一个文件。 (但它的错误已经给接口不是BrightScript组件的成员)
  4. 使用相同的标签并在标签内调用另一个文件。 (但它不会从另一个文件中获取值)。

这是我的第一个文件 将代码写入第一个屏幕

Main.brs

  screen = CreateObject("roSGScreen")     'one Application only once roSGScreen
  m.port = CreateObject("roMessagePort")
  screen.setMessagePort(m.port)
  scene = screen.CreateScene("WisePanel")     'Here the First screen component name
  screen.show()

PanelSet.xml

<?xml version="1.0" encoding="UTF-8"?>

<component name="WisePanel" extends="Scene">

<script type="text/brightscript" uri="pkg:/components/PanelSet.brs" />
<Group  id="FirstScreen" > 

      <Label  
      id = "lbfirstscreen" 
      font="font:LargeBoldSystemFont"
      text = "This is the first Screen"
      translation = "[200,250]" /> 

</Group>

</component>

这里.brs文件中的按键事件设置为打开另一个屏幕(点击option键打开一个新屏幕)

PanelSet.brs

sub init()

     m.FirstScreenLabel = m.top.findNode("lbfirstscreen")

end sub

function onKeyEvent(key as String, press as Boolean) as Boolean

 handled = false

  if press then
      if key="options" then
          ' Here the write a Logic
          keyboard= CreateObject("roSGNode", "KeyboardDialog")

          ?"call keyevent Fucntion"

          'here show function to give a error
          m.top.ComponentController.CallFunc("show", {
          view: keyboard
    })
      end if
  end if

end function

我的第二个屏幕 XML 和 brs 都在单个文件中文件是

keyboarddialogscene.xml

<?xml version = "1.0" encoding = "utf-8" ?> 

<component name = "KeyboardDialog" extends = "Group" >

<script type = "text/brightscript" >

<![CDATA[

sub init()

    m.SecondScreenLabel = m.top.findNode("lblsecondscreen")

end sub


]]>

</script>
<children >
<Group id="SecondScreen" > 

      <Label  
      id = "lblsecondscreen" 
      font="font:LargeBoldSystemFont"
      text = "This is the second Screen"
      translation = "[200,250]" /> 

</Group>


</children>

</component>

我尝试点击 Remote Option 键,然后我在第二个屏幕文件上显示一个标签,任何人都知道这个问题。

我使用了你的代码,我能够让它工作,但是,我做了一些调整。

我认为您现在遇到的代码问题是 "scope" 问题,让我稍微解释一下。

您正在尝试在 panelset.brs 文件中调用 "m.top.ComponentController",但 "ComponentController" 不是面板集组件上的字段,在该范围内您只能访问面板集上的字段接口.

所以你有两个选择:

1 - 在你的 panelSet.brs 上而不是调用 "m.top.ComponentController" 将其更改为 "m.top.getScene().ComponentController".

2 - 在 wisePanel.xml 上创建一个字段,向创建 WisePanel 组件的那个字段添加一个侦听器,在该范围内,您将能够 m.top.componentController。

注意:我在您的文件中使用了 Roku Dev 的 setup_and_helloworld link 示例。

Doc