Scalajs, js.Dictionary 不一致的行为
Posted
技术标签:
【中文标题】Scalajs, js.Dictionary 不一致的行为【英文标题】:Scalajs, js.Dictionary inconsistent behavior 【发布时间】:2021-12-27 12:49:59 【问题描述】:我在使用 ScalaJS 时遇到了一个不一致的错误。这是一个最小的例子:字典变量的大小和内容不一致。
def A(mapping: js.Dictionary[String]): Unit =
dom.console.log(mapping)
dom.console.log(mapping.size)
我使用 fastOptJS 链接 IR。在 html 的驱动程序代码中,我有
const colorSetting = new Map([
["1", "black"]
]);
ScalaJSExample.A(colorSetting)
在控制台中,第一行正确打印了变量的内容,
"Map "1" => "black""
但是第二行打印的是0。我也试过交换两行的位置,但是结果是一样的。 .foreach 或 for (x
有什么建议为什么会这样?我正在使用 Scala 2.12.8、ScalaJS 1.7.1。
谢谢!
【问题讨论】:
【参考方案1】:js.Dictionary
代表一个 POJO(普通的旧 javascript 对象),其中元素是字段。但是您将 JS new Map()
传递给它,这不是 POJO——它是 Map
。表示 JS Map 的正确类型是 js.Map
。
要么将字典传递给ScalaJSExample.A
,如下所示:
const colorSetting =
"1": "black"
;
ScalaJSExample.A(colorSetting)
或在 Scala.js 代码中将 mapping
声明为 js.Map
:
def A(mapping: js.Map[String, String]): Unit =
dom.console.log(mapping)
dom.console.log(mapping.size)
【讨论】:
以上是关于Scalajs, js.Dictionary 不一致的行为的主要内容,如果未能解决你的问题,请参考以下文章
scalajs-react:Ajax GET 与 DELETE 的意外差异
Scalajs-react:未捕获的 TypeError:无法读取 null 的属性(读取“值”)