2

我正在关注这里的教程:

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', 数据);

我怎样才能做到这一点?

我在 js 文件夹中的 Main.scala 文件如下所示:

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

但老实说,我不遵循来自不同语言生态系统的那些步骤。

4

1 回答 1

1

“我不遵循这些步骤”不是描述您遇到的问题的有用方式。

你需要做什么看起来很明显。有一个名为 的全局对象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 中实现,所以你需要遵循这个指南

对于scatter类型图,它可能如下所示:

case class PlotData(
  x: js.Array[Double],
  y: js.Array[Double]
) extends js.Object {
  def type: String = "scatter"
}
于 2020-06-30T19:14:07.980 回答