【问题标题】:Creating custom DOM events with scalajs使用 scalajs 创建自定义 DOM 事件
【发布时间】:2014-08-28 11:42:07
【问题描述】:

我找不到使用 scala-js 创建自定义事件的方法。例如,使用 js,您可以创建如下自定义事件(取自此处):

  var event = new CustomEvent('build', { 'detail': elem.dataset.time });

但是,在 scala-js 中没有 CustomerEvent 或 Event 的构造函数接受参数。此外,子类化,例如:

  class DrawEvent extends Event {
    override def `type` = "draw"
  }

导致

Uncaught TypeError: undefined is not a function

尝试通过new DrawEvent()构建时

有什么想法吗?

【问题讨论】:

    标签: scala scala.js


    【解决方案1】:

    要在 ScalaJs 中实例化 javascript 类,您必须使用 js.Dynamic.newInstance:

    这应该适用于您的用例:

    val event = js.Dynamic.newInstance(js.Dynamic.global.CustomEvent)("build", js.Dynamic.literal(detail = elem.dataset.time)).asInstanceOf[js.dom.CustomEvent]

    在以下的备注部分(一直在底部)提供了更多信息: http://www.scala-js.org/doc/calling-javascript.html

    这是相同的解决方案,使用一些导入使其更短

    import js.Dynamic.{ global => g, newInstance => jsnew, literal => lit }
    val event = jsnew(g.CustomEvent)("build", lit(detail = elem.dataset.time)).asInstanceOf[js.dom.CustomEvent]
    

    【讨论】:

    • 变量elem是什么?
    【解决方案2】:

    如果你想留在类型化的 DOM 中(假设你在谈论 scala-js-dom 库),你可以这样做:

    new CustomEvent().initCustomEvent('build', false, false, elem.dataset.time)
    

    您使用的构造函数实际上只在DOM 4 中指定(参见MDN)。

    【讨论】:

    • 这给了我:scala.scalajs.js.JavaScriptException: TypeError: Failed to construct 'CustomEvent': 1 argument required, but only 0 present.
    猜你喜欢
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 2014-06-14
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多