从scala.js 0.6.x
迁移到1.0
之后,我发现一些与@JSGlobalScope
相关的代码已损坏。
我的用例是这样的:
代码看起来像这样:
@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
中执行这样的操作(创建新的全局变量)的正确方法是什么?>>
从scala.js 0.6.x迁移到1.0后,我发现了与@JSGlobalScope相关的一些代码。我的用例是这样的:有一个第三方库,希望将某些全局变量设置为...
[如果知道您将始终处于浏览器上下文中,则可以在@JSGlobal("window")
上使用@JSGlobalScope
而不是Globals
,这等同于在JS中执行window.myGlobalVarFor3rdPartyLib
。这样就可以了。