我正在以异步方式加载谷歌地图,
@JSExport("sample")
object Sample {
def loadScript = {
val script = document.createElement("script").asInstanceOf[HTMLScriptElement]
script.`type` = "text/javascript"
//case 1
script.src = "https://maps.googleapis.com/maps/api/js?v=3.exp&callback=sample().initialize"
// case 2
script.src = "https://maps.googleapis.com/maps/api/js?v=3.exp&callback=sample.initialize"
document.body.appendChild(script)
}
@JSExport
def initialize() :Unit = {
println(" map loaded successfully")
}
}
情况 1 google 发送响应 - 400(错误请求)
在情况 2 中,我得到了未定义的函数 ( window.sample.initialize())
我可以定义一个javascript函数,在该函数内我可以调用sample().initialize(),但是有没有更干净的方法?
最佳答案
我将使用 Scala.js 的动态 API 在顶层创建 JavaScript 函数。相对于 @gzm0 的解决方案的优点是它不那么麻烦,并且需要更少的样板文件。
object Sample {
def loadScript = {
val script = document.createElement("script").asInstanceOf[HTMLScriptElement]
script.`type` = "text/javascript"
script.src = "https://maps.googleapis.com/maps/api/js?v=3.exp&callback=initializeSample"
document.body.appendChild(script)
js.Dynamic.global.initializeSample = initialize _
}
private def initialize(): Unit =
println("map loaded successfully")
}
关于scala.js - 使用 scala.js 方法作为回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27440235/