是否可以在ROKU中从一个文件到另一个文件进行场景访问?

时间:2019-08-21 06:19:19

标签: roku brightscript

我使用明亮的脚本创建了两个文件。两者都在一个场景中扩展,因此我访问一个文件中的第二个文件。但是不行。

我将一个文件用于扩展场景,将另一个文件用于组。这在下面的代码中起作用。

m.keypanel = m.panelset.createChild("KeyboardDialogExample")

有什么方法可以访问它?

编辑后的帖子enter image description here

我在“向上”或“向下”键中保持“焦点”。它正在工作,并且如果保持电子邮件焦点,则打开对话框以按“确定”。但是给这个错误。我单独使用了,它成功工作。

2 个答案:

答案 0 :(得分:1)

实际上,代码中发生的事情是在init()函数中创建一个“ KeyboardDialogExample”子级,这很好。问题在于为那个孩子设定焦点。基本上,init()函数在解析相应的xml文件后立即被调用,并用于缓存Node和设置字段观察器。因此,不应将此功能用于将焦点放在另一个组件上。默认情况下,第二件事“组”节点不可聚焦。可以使它成为可聚焦的对象,但是几乎不需要它一直都在,因为可以用另一种更简单的方式实现相同的功能。以下是我对您的要求的建议---

  1. 先替换

m.keypanel = m.panelset.createChild("KeyboardDialogExample") m.keypanel.setFocus(true)

使用

m.keypanel = CreateObject("roSGNode", "KeyboardDialogExample")
m.keypannel.visible = false
m.top.appendChild(m.keypanel)

这是访问其他组件的推荐方法。

  1. 现在将要在哪个按键事件上将可见性设置为true-
    m.keypannel.visible = true

  2. 在“ KeyboardDialogExample”的init()函数中将可见性观察者添加为-

    m.top.observeField("visible", "actionsToBePerformedOnVisibilityChange")

创建一个名称为“ actionsToBePerformedOnVisibilityChange”的函数(或您要保留的任何名称,也可以在observeField行中对其进行更改),然后添加要对该组的可见性执行的任何操作的代码。

function actionsToBePerformedOnVisibilityChange()
    if m.top.visible = true
     'add the action code here. 
    end if
end function
  1. 如果您想从“ KeyboardDialogExample”回到以前的版本,只需制作

    m.keypannel.visible = false

在您想要的任何按键事件上,并将焦点设置在主场景的某个字段上。

尝试这样编码。之后,您可以在两个文件之间跳转。

注意:-,您可能会想知道为什么我们要重复设置可见性为是和否。这是因为观察者通常在前一个值发生变化时工作。代码,如果我们不会在主场景的init()函数中将“ keyboaddialogexample”的可见性设置为false,则在将其更改为true时,它不会观察该值,因为默认情况下为true。) 希望,我回答了你在看什么。

答案 1 :(得分:0)

是的, 在您的m.keypanel的.xml文件中(我看到该组件的xml文件可能命名为“ KeyboardDialogExample”),将您的值暴露给接口,如下所示:

<interface>
    <field id="valueforuri" type="string" />
<interface>

现在,您可以从最初创建m.keypanel组件的文件中调用m.keypanel.valueforuri =“ www.google.com”。 您还可以从另一个文件/组件中发送要在m.keypanel中触发的功能。 请检查link,了解您如何执行此操作。