我正在尝试使用Play Framework 2.5的ScalaJs交叉构建项目。 当我尝试运行Client.scala的测试时,我遇到了问题。 我得到的错误是 -
引起:TypeError:无法调用方法" appendChild" null。
客户端代码段
@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时,我得到了上面提到的错误。 请帮忙。
P.S - 我对Scala和ScalaJs来说是全新的。
答案 0 :(得分:2)
嗯,该错误似乎与bodyFrag
无关。 (或者Play,甚至是Scala.js,真的。)错误实际上是说getElementById("bodyContent")
为空,这意味着它还没有存在。我认为它是在HTML中声明的。
这是浏览器代码中的常见陷阱。在尝试操作之前,您需要等待DOM准备好;你没有显示HTML页面,所以我不确定你是否这样做,但我怀疑不是。
有各种方法可以等待DOM准备好 - 常见(但速度较慢)onload
方法和jQuery方法,已经讨论过in the jQuery documentation。作为快速修复,我建议将调用包装到window.onload
内的Scala.js代码中。