2

Play Framework 2.5 で ScalaJs クロスビルド プロジェクトを使用しようとしています。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 を操作する前に、DOM の準備が整うまで待つ必要があります。あなたは HTML ページを表示していないので、そうしているのかどうかはわかりませんが、していないのではないかと思います。

DOM の準備が整うのを待つにはさまざまな方法があります。一般的な (ただし遅い)onload方法と jQuery の方法については、jQuery のドキュメント で説明されています。簡単な修正として、Scala.js コードへの呼び出しを 内にラップすることをお勧めしますwindow.onload

于 2016-04-05T17:51:33.550 に答える