如何使用 Brightscript 访问另一个文件标签?
How to Access another file Label using a Brightscript?
我正在尝试简单的导航。而且我尝试了不止一种打开另一个屏幕的方法。
- Hide/show 概念(但它只适用于单个文件)。
- 使用视图堆栈(但仍然无法正常工作)
- 使用标签并在标签内调用另一个文件。 (但它的错误已经给接口不是BrightScript组件的成员)
- 使用相同的标签并在标签内调用另一个文件。 (但它不会从另一个文件中获取值)。
这是我的第一个文件 将代码写入第一个屏幕
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 示例。
我正在尝试简单的导航。而且我尝试了不止一种打开另一个屏幕的方法。
- Hide/show 概念(但它只适用于单个文件)。
- 使用视图堆栈(但仍然无法正常工作)
- 使用标签并在标签内调用另一个文件。 (但它的错误已经给接口不是BrightScript组件的成员)
- 使用相同的标签并在标签内调用另一个文件。 (但它不会从另一个文件中获取值)。
这是我的第一个文件 将代码写入第一个屏幕
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 示例。