ScalaJS Uncaught TypeError: (0 , $m_Lorg_scalajs_jquery_package$(...).jQuery$1) is not a function
ScalaJS Uncaught TypeError: (0 , $m_Lorg_scalajs_jquery_package$(...).jQuery$1) is not a function
我正在阅读本 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"
我还在 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>
我也做了
npm install jsdom
这是我的 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>")
}
}
但我的代码仍然出现以下错误
Uncaught TypeError: (0 , $m_Lorg_scalajs_jquery_package$(...).jQuery) 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
您需要在 fastopt.js
之前 jsdeps
添加脚本标签。否则,当您的主要方法运行时,jQuery 尚未加载。
我正在阅读本 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"
我还在 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>
我也做了
npm install jsdom
这是我的 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>")
}
}
但我的代码仍然出现以下错误
Uncaught TypeError: (0 , $m_Lorg_scalajs_jquery_package$(...).jQuery) 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
您需要在 fastopt.js
之前 jsdeps
添加脚本标签。否则,当您的主要方法运行时,jQuery 尚未加载。