我正在阅读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)