Scala.js:对象字面值,键名中有冒号
Scala.js: object literal with keys having colons in their names
我使用的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字节码中允许的字符的限制。
相关文章:
- 查看JS对象的所有键,甚至是getter定义的键
- 在URL中传递JS对象
- 当属性不一致时,如何根据属性对JS对象列表进行排序
- JS对象密钥序列
- 在ajax调用中阻止来自JS对象的函数
- 属性未添加到JS对象
- 将字符串转换为JS对象
- 使用lodash查找具有truthy值的JS对象的属性
- 将toString方法暴露给nashorn中的js对象
- JSON数组转换为JS对象数组
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 设置1400个Raphael.js对象的不透明度动画会影响动画性能
- 以非ajax方式将js对象传递给mvc操作
- JS对象->来自jquery ajax的JSON提交->php迭代
- XMLHttpRequest发送JS对象
- 使用游标循环将JS对象添加到数组中
- 动态(重新)创建iframe内容不会重置Chrome中的JS对象
- 将JS对象数组转换为嵌套形式的最有效方法
- 在知道对象值的情况下,确定数组中JS对象的索引
- JS对象文字中的方法和子方法