2014-07-07 128 views
1

我找不到用scala-js創建自定義事件的方法。例如,對於JS你可以創建類似以下的自定義事件(從這裏獲取):用scalajs創建自定義DOM事件

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

然而,在斯卡拉-JS接受的參數沒有構造爲CustomerEventEvent。此外,無論是子類如:

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

嘗試通過new DrawEvent()

任何想法來構建時導致

Uncaught TypeError: undefined is not a function

回答

1

實例化的JavaScript類在ScalaJs你必須使用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

如果你想留在鍵入的DOM(假設你正在談論的斯卡拉-JS-DOM庫),你可以這樣做:

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

您所使用的構造函數實際上只在DOM 4中指定(見MDN)。