如何在 Scalajs 项目中使用 Javascript 库

How to Use a Javascript Library in a Scalajs Project

我正在按照这里的教程进行操作:

https://www.scala-js.org/doc/project/dependencies.html

  1. 首先,我的项目设置如下:

https://github.com/scala-js/scalajs-cross-compile-example

在不做任何更改的情况下,当我传入以下命令时,这 运行 符合预期:

sbt> fooJS/run
sbt> fooJVM/run
  1. 现在我要导入这个库:

  2. 我想要运行以下功能:

    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"
}