我正在异步加载谷歌地图,
@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(),但是有没有更干净的方法呢?
发布于 2014-12-12 11:51:40
我将使用Scala.js的动态API在顶层创建JavaScript函数。与@gzm0 0的解决方案相比,它的优势在于它不那么麻烦,而且需要更少的样板。
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")
}发布于 2014-12-12 09:48:42
这是一个令人讨厌的答案,但作为一种解决办法,它可能是有用的。
与其给Google与Scala.js函数相对应的东西,您还可以直接给它模块初始化器:
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)
}
}
@JSExport("initializeSample")
object Initializer {
println(" map loaded successfully")
}https://stackoverflow.com/questions/27440235
复制相似问题