使用scalajs创建自定义DOM事件

时间:2014-07-07 21:11:21

标签: scala scala.js

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

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

但是,scala-js中没有CustomerEventEvent的构造函数接受参数。另外,子类化如:

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

导致

  

未捕获的TypeError:undefined不是函数

尝试通过new DrawEvent()构建时

有什么想法吗?

2 个答案:

答案 0 :(得分: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]

答案 1 :(得分:1)

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

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

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