2

我正在尝试将 ScalaJs 交叉构建项目与 Play Framework 2.5 一起使用。当我尝试为 Client.scala 运行测试时遇到问题。我得到的错误是 -

由:TypeError:无法调用 null 的方法“appendChild”。

客户端片段

@JSExport
object DashboardClient extends js.JSApp {
@JSExport
def main(): Unit = {
val dashboard = new Dashboard
dom.document.getElementById("bodyContent").appendChild(dashboard.bodyFrag.render)
}

这个 bodyFrag 在不同的类中

 def bodyFrag =
div(
  div(
    `class` := "row border-bottom",
    div(
      `class` := "col-md-12",
      div(
        `class` := "col-md-2 image-alignment",
        img(width := "161", src := "/assets/images/mountain.jpg")
      ),
      div(`class` := "col-md-10")
    )
  ),
  div(
    `class` := "row border-bottom",
    div(
      `class` := "col-md-12",
      div(
        `class` := "col-md-12",
        h1(`class` := "text-center", "Dashboard")
      )
    )
  )
)

因此,当我尝试使用 utest 进行测试时,我得到了上述错误。请帮忙。

PS - 我对 Scala 和 ScalaJs 完全陌生。

4

1 回答 1

2

好吧,该错误似乎与bodyFrag. (或者 Play,甚至是 Scala.js,真的。)这个错误实际上是说它getElementById("bodyContent")是 null,这意味着它还不存在。我假设它是在 HTML 中声明的。

这是浏览器代码中的常见陷阱。在尝试操作之前,您需要等待 DOM 准备好;你没有显示 HTML 页面,所以我不确定你是否这样做,但我怀疑不是。

有多种方法可以等待 DOM 就绪——常见(但速度较慢)onload方法和 jQuery 方法在 jQuery 文档中进行了讨论。作为快速修复,我建议将调用 Scala.js 代码封装在window.onload.

于 2016-04-05T17:51:33.550 回答