如何在案例类中将scala seq导出到js.Array

时间:2017-04-13 09:17:52

标签: scala scala.js case-class

此问题是与How to export properties of shared case classes

相关的问题

如果我有一个

形式的案例类
case class Foo(var id : Long,var title: Seq[String])

即。它包含一系列数据,是否有任何设置要导出为js.Array

2 个答案:

答案 0 :(得分:0)

在Scala.js专用项目中,只需执行以下操作:

case class Foo(var id: Long, var title: Seq[String]) {
  @JSExport("title")
  protected def jsTitle: js.Array[String] =
    title.toJSArray

  @JSExport("title")
  protected def jsTitle_=(v: js.Array[string]): Unit =
    title = v.toSeq
}

但是,这将拒绝在共享源中进行编译,因为Scala / JVM不了解js.Array

我担心你的问题没有样板解决方案。最简单的解决方案是在项目的JVM和JS部分中单独声明Foo。然后,您仍然可以从共享源中使用它。

答案 1 :(得分:0)

我总体上使用了upickle,我走的方式是在共享项目中使用泛型 即

case class Foo[S[_]](var id : Long, var title: S[String])
在scala JVM中的

我将case类挑选为表单的对象

Foo(id, Seq(title1, title2, ...))

它是Foo[Seq]类型的对象,在scala JS中我将对象pickle为 Foo[js.Array]