javascript - Scala.js:对象文字,键名中有冒号

标签 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"]

我该如何解决这个问题?

最佳答案

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

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

这当然也应该与 literal 一起工作,但由于令人讨厌的编译器内部细节,它不能工作:paren$colonaction 是 Scala 编译器内部表示名称 paren:action,主要是JVM字节码对允许字符的限制。

关于javascript - Scala.js:对象文字,键名中有冒号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39211075/

相关文章:

javascript - 用 base64 编码字符串替换 css 文件中的所有图像路径 - 汇总

javascript - 原型(prototype)声明的函数不是函数

java - 在 Java 8 中展开多个可选变量

scala - 带有自签名证书的 Spray https 服务器的配置问题?

Javascript 函数返回意外结果

javascript - 通过 JavaScript 使用原型(prototype)的公共(public)方法

scala - Scala 2.9 中的 “scala.sys.process” 如何工作?

scala - 在 Scala.js 中投票 future

java - Scala 与 Java toUpperCase/toLowerCase