scala.js - 使用 scala.js 方法作为回调

标签 scala.js

我正在以异步方式加载谷歌地图,

@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/

相关文章:

javascript - 将 Scala.js 用于非 Web、非 Node.js 应用程序涉及什么?

scala.js - 如何在 Scala.js 中读取资源文件?

scala.js - 检查调用结果是否未定义

javascript - 如何在真实浏览器中运行 ScalaJs 测试?

sbt - 如何在scalajs项目中导入 `%%%`中的 `Build.scala`?

javascript - 如何在 Scalajs 项目中使用 Javascript 库

javascript - 以尽可能最封装的方式包装/外观 ScalaJS React js 组件(react-sticky)

javascript - 从 SJSIR `manually` 构建 JS

由于 "TypeError: undefined is not a function",sbt 和 scala.js(带有 Node.js)无法使用本地 .js 依赖项运行