如何在 Scalajs 项目中使用 Javascript 库
How to Use a Javascript Library in a Scalajs Project
我正在按照这里的教程进行操作:
https://www.scala-js.org/doc/project/dependencies.html
- 首先,我的项目设置如下:
https://github.com/scala-js/scalajs-cross-compile-example
在不做任何更改的情况下,当我传入以下命令时,这 运行 符合预期:
sbt> fooJS/run
sbt> fooJVM/run
现在我要导入这个库:
我想要运行以下功能:
Plotly.newPlot('myDiv', 数据);
我该怎么做?
我的 Main.scala 文件在 js 文件夹中如下所示:
package example
object Main extends App {
println(s"Using Scala.js version ${System.getProperty("java.vm.version")}")
}
我知道这个库的外观已经存在,但我希望能够为未来的项目创建我自己的外观,并以此为例。我在这里阅读教程:
https://www.scala-js.org/doc/interoperability/facade-types.html
但老实说,我不遵循来自不同语言生态系统的那些步骤。
“我没有遵循这些步骤”不是描述您遇到的问题的有用方式。
您需要做什么看起来很明显。有一个名为 Plotly
的全局对象,它有一个名为 newPlot
的方法,该方法采用 String
和包含数据的对象数组。所以你需要这样的东西:
@js.native
@JSGlobal
object Plotly extends js.Object {
def newPlot(id: String, data: js.Array[PlotData]) = js.native
}
既然我们已经有了,我们还需要指定 PlotData
应该是什么样子。不同于Plotly
对象的类型,我们只是指定接口,实际对象在JS中实现,这种类型是要在Scala中实现的,所以需要遵循this guide.
对于 scatter
类型的情节,它可能看起来像这样:
case class PlotData(
x: js.Array[Double],
y: js.Array[Double]
) extends js.Object {
def type: String = "scatter"
}
我正在按照这里的教程进行操作:
https://www.scala-js.org/doc/project/dependencies.html
- 首先,我的项目设置如下:
https://github.com/scala-js/scalajs-cross-compile-example
在不做任何更改的情况下,当我传入以下命令时,这 运行 符合预期:
sbt> fooJS/run
sbt> fooJVM/run
现在我要导入这个库:
我想要运行以下功能:
Plotly.newPlot('myDiv', 数据);
我该怎么做?
我的 Main.scala 文件在 js 文件夹中如下所示:
package example
object Main extends App {
println(s"Using Scala.js version ${System.getProperty("java.vm.version")}")
}
我知道这个库的外观已经存在,但我希望能够为未来的项目创建我自己的外观,并以此为例。我在这里阅读教程:
https://www.scala-js.org/doc/interoperability/facade-types.html
但老实说,我不遵循来自不同语言生态系统的那些步骤。
“我没有遵循这些步骤”不是描述您遇到的问题的有用方式。
您需要做什么看起来很明显。有一个名为 Plotly
的全局对象,它有一个名为 newPlot
的方法,该方法采用 String
和包含数据的对象数组。所以你需要这样的东西:
@js.native
@JSGlobal
object Plotly extends js.Object {
def newPlot(id: String, data: js.Array[PlotData]) = js.native
}
既然我们已经有了,我们还需要指定 PlotData
应该是什么样子。不同于Plotly
对象的类型,我们只是指定接口,实际对象在JS中实现,这种类型是要在Scala中实现的,所以需要遵循this guide.
对于 scatter
类型的情节,它可能看起来像这样:
case class PlotData(
x: js.Array[Double],
y: js.Array[Double]
) extends js.Object {
def type: String = "scatter"
}