You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TextEditBox无法获取输入值及页面导航代码正确性排查

页面导航代码正确性分析

从MainScene打开ProfileSelectionScreen的代码

这段逻辑是正确的:创建ProfileSelectionScreen节点后,将其添加到当前场景并设置焦点,符合Roku组件导航的基本流程。

从ProfileSelectionScreen打开CreateProfileScreen的代码

核心逻辑可行,但存在潜在风险:

  • 隐藏当前组件(m.top.visible = false)的处理没问题,但未将其从场景树移除,这可能导致旧组件内的元素继续拦截输入事件。
  • 获取场景的降级逻辑(先尝试自身getScene(),再通过父节点获取)是稳妥的,避免场景引用失效。
  • 创建并添加新组件、设置焦点的流程正确,日志输出也便于排查组件是否成功创建。

TextEditBox无法获取输入的排查方向
  • 隐藏组件抢占焦点
    你仅将ProfileSelectionScreen设为不可见,但它仍在场景树中。如果该组件内包含TextEditBox,即使视觉上不可见,系统仍可能将输入事件路由给它。建议改为从场景树移除旧组件:

    ' 替换 m.top.visible = false 为以下代码
    scene.removeChild(m.top)
    

    若后续需要返回该页面,可提前保存组件引用,或重新创建。

  • TextEditBox自身配置缺失
    检查目标TextEditBox的关键属性:

    • 确认focusable=true:只有开启该属性,节点才能获取输入焦点
    • 确认editable=true:该属性控制节点是否允许输入内容
  • Group组件的焦点传递问题
    由于CreateProfileScreen继承自Group,需确保:

    • Group自身设置focusable=true,或配置focusPolicy="childFirst",确保焦点能传递到内部的TextEditBox节点
    • 内部TextEditBox的focusable属性未被父节点的配置覆盖
  • 场景层级与焦点优先级
    确保CreateProfileScreen处于场景树的最顶层,避免被其他组件拦截输入。添加后可调用bringToFront()强制提升层级:

    scene.appendChild(form)
    form.bringToFront()
    form.setFocus(true)
    
  • 验证当前焦点节点
    通过日志打印当前获取焦点的节点,确认是否为目标TextEditBox:

    ? "当前焦点节点: " + m.top.getScene().getFocusedNode().getName()
    

    若输出为旧组件内的节点,即可确认焦点被抢占。


内容的提问来源于stack exchange,提问作者Raxit Pandya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 00:45:04