Scala.js:对象文字,其名称中包含冒号的键

时间:2016-08-29 16:37:39

标签: javascript scala scala.js

我正在使用的Javascript库需要以下对象:

{
  "paren:action": ...
}

正如您所看到的,键/属性的名称中有一个冒号,这就是我必须将名称放在引号中的原因。 目前,我正在尝试使用Scala.js创建一个相同的对象:

@JSExport
def create() = {
  literal(`paren:action` = ...)
}

我已经在使用返回标记,因为没有它们,它甚至都不会编译。但是,生成的对象的名称不是预期的。

示例(在Chrome控制台中执行):

var a = { "paren:action": ... };
"paren:action" in a; // => true
Object.keys(a); // => ["paren:action"]

var b = ScalaJsApp().create();
"paren:action" in b; // => false
Object.keys(b); // => ["paren$colonaction"]

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

解决此问题的最简单方法是使用js.Dictionary

def create() = {
  js.Dictionary("paren:action" -> ...)
}

这当然也应该与literal一起使用但由于讨厌的编译器内部细节而不能:paren$colonaction是Scala编译器内部代表名称paren:action的方式,主要是由于对JVM字节码中允许的字符的限制。