【问题标题】:How to Use a Javascript Library in a Scalajs Project如何在 Scalajs 项目中使用 Javascript 库
【发布时间】:2020-07-01 05:03:59
【问题描述】:

我正在学习这里的教程:

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

我该怎么做?

我的 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

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

【问题讨论】:

  • “但是这失败了”。它是如何失败的?你尝试了什么?你在哪里运行了什么命令?你期待什么,却发生了什么?帮助我们帮助您。延伸阅读:stackoverflow.com/help/how-to-ask
  • 道歉我应该更清楚 - 我会更新原来的帖子
  • @sjrd 我用一个更现实的例子让问题更简单更具体,不清楚请告诉我。

标签: javascript scala scala.js cross-build


【解决方案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中实现,所以你需要遵循this guide

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

case class PlotData(
  x: js.Array[Double],
  y: js.Array[Double]
) extends js.Object {
  def type: String = "scatter"
}

【讨论】:

    猜你喜欢
    • 2015-10-08
    • 2016-04-18
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    • 2016-11-07
    • 2018-09-12
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多