我正在尝试scala.js,我必须说它给人留下了深刻的印象!但是,我尝试将它一点一点地引入到我们的生产中,与现有的JavaScript代码并行工作.我正在努力的一件事是将复杂的结构从JS传递到Scala.例如,我有来自其他JS模块的现成JS对象:
h = {
"someInt": 123,
"someStr": "hello",
"someArray": [
{"name": "a book", "price": 123},
{"name": "a newspaper", "price": 456}
],
"someMap": {
"Knuth": {
"name": "The Art of Computer Programming",
"price": 789
},
"Gang of Four": {
"name": "Design Patterns: Blah-blah",
"price": 1234
}
}
}
It
Run Code Online (Sandbox Code Playgroud)
有一些整数,一些字符串(所有这些元素都有固定的键名!),其中有一些数组(其中还有一些对象)和一些映射(将任意字符串键映射到更多对象).一切都是可选的,可能会丢失.显然,它只是一个虚构的例子,现实生活中的对象要复杂得多,但所有的基础都在这里.我已经在Scala中有相应的类层次结构,它看起来像这样:
case class MegaObject(
someInt: Option[Int],
someStr: Option[String],
someArray: Option[Seq[Item]],
someMap: Option[Map[String, Item]]
)
case class Item(name: Option[String], price: Option[Int])
Run Code Online (Sandbox Code Playgroud)
我的第一次尝试是尝试按原样使用接收器类型:
@JSExport
def try1(src: MegaObject): Unit = {
Console.println(src)
Console.println(src.someInt)
Console.println(src.someStr) …
Run Code Online (Sandbox Code Playgroud)