【发布时间】:2020-03-19 18:49:18
【问题描述】:
从 scala.js 0.6.x 迁移到 1.0 后,我有一些与 @JSGlobalScope 相关的代码损坏。
我的用例是这样的:
- 有一个第 3 方库需要将一些全局变量设置为函数
- 加载并准备就绪后,它会调用此函数(按名称)
- 我在 scala.js 的全局范围内设置了这个函数
代码如下:
@js.native
@JSGlobalScope
object Globals extends js.Object {
var callbackFunctionFor3rdPartyLib: js.Function0[Unit] = js.native
}
然后我像这样设置这个变量:
Globals.callbackFunctionFor3rdPartyLib = () => {
// do things
}
然后我将脚本添加到 DOM 中。
这适用于 scala.js 0.6.x,但对于 1.0,我遇到如下异常:
scala.scalajs.js.JavaScriptException: ReferenceError: callbackFunctionFor3rdPartyLib is not defined
在changelog for 1.0.0 中有一个“重大更改”部分提到了这一点:
访问未声明的成员会导致抛出 ReferenceError ...
js.Dynamic.global.globalVarThatDoesNotExist = 42之前会创建所述全局变量。在 Scala.js 1.x 中,它还会引发 ReferenceError。
我的问题是:
在 scala.js 1.0 中做这样的事情(创建一个新的全局变量)的正确方法是什么?
【问题讨论】: