ScalaJS Uncaught TypeError:(0,$ m_Lorg_scalajs_jquery_package $(...).jQuery $ 1)不是函数

Kno*_*uch 7 scala scala.js

我正在阅读ScalaJS的这个教程

https://www.scala-js.org/tutorial/basic/

正如您在build.sbt中看到的那样,我已经包含了对jQuery库的引用

enablePlugins(ScalaJSPlugin)

// This is an application with a main method
scalaJSUseMainModuleInitializer := true

name := "ScalaJSTest"

version := "1.0"

scalaVersion := "2.12.1"

libraryDependencies ++= Seq(
   "org.scala-js" %%% "scalajs-dom" % "0.9.1",
   "be.doeraene" %%% "scalajs-jquery" % "0.9.1"
)
jsDependencies += RuntimeDOM
skip in packageJSDependencies := false
jsDependencies +=
   "org.webjars" % "jquery" % "2.1.4" / "2.1.4/jquery.js"
Run Code Online (Sandbox Code Playgroud)

我还在我的HTML中包含了jsDeps和jquery库

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>The Scala.js Tutorial</title>
</head>
<body>
<!-- Include Scala.js compiled code -->
<script type="text/javascript" src="./target/scala-2.12/scalajstest-fastopt.js"></script>
<script type="text/javascript" src="./target/scala-2.12/scalajstest-jsdeps.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我也做到了

npm install jsdom
Run Code Online (Sandbox Code Playgroud)

这是我的scalajs代码

import scala.scalajs.js.JSApp
import org.scalajs.dom
import dom.document
import org.scalajs.jquery.jQuery
import scala.scalajs.js.annotation.JSExportTopLevel

object ScalaJsTest extends JSApp {
   def main() : Unit = {
      jQuery(() => setupUI())
   }
   def appendPar(node: dom.Node, text: String) : Unit = {
      jQuery("body").append(s"<p>$text</p>")
   }
   @JSExportTopLevel("addClickedMessage")
   def addClickedMessage(): Unit = {
      appendPar(document.body, "You clicked the button!")
   }
   def setupUI(): Unit = {
      jQuery("#click-me-button").click(() => addClickedMessage())
      jQuery("body").append("<p>Hello World</p>")
   }
}
Run Code Online (Sandbox Code Playgroud)

但我的代码仍然会出现以下错误

Uncaught TypeError: (0 , $m_Lorg_scalajs_jquery_package$(...).jQuery$1) is not a function
    at $c_LScalaJsTest$.appendPar__Lorg_scalajs_dom_raw_Node__T__V (scalajstest-fastopt.js:2341)
    at $c_LScalaJsTest$.main__V (scalajstest-fastopt.js:2332)
    at scalajstest-fastopt.js:6848
    at scalajstest-fastopt.js:6849
Run Code Online (Sandbox Code Playgroud)

sjr*_*jrd 15

您需要jsdeps for 之前包含脚本标记fastopt.js.否则,在main方法运行时,jQuery尚未加载.