2014-07-24 13 views
6

In JavaScript hinzufügen, der addEventListener() -Methode wird wie folgt verwendet:Scala.js: addEventListener Ereignisse Objekte

object.addEventListener("click", myScript); 

In Scala.js: Ich habe eine Leinwand, und ich möchte, um hören klickt nur auf die Leinwand, nicht auf das gesamte Dokument. In der Scala.js.dom Bibliothek wird addEventListener wie folgt definiert:

def addEventListener(`type`: String, listener: js.Function1[Event, _], useCapture: Boolean = ???): Unit = ??? 

Ich bin nicht sicher, was "useCapture" bezeichnet. Aber ich habe versucht:

dom.document.getElementById("canvas").addEventListener("click", { 
(e:dom.MouseEvent) => { /*do something*/ } 
}, false) 

und die Fehlermeldung, die ich bekam:

found : org.scalajs.dom.MouseEvent => Unit 
required: scala.scalajs.js.Function1[org.scalajs.dom.Event, _] 

Kann jemand erklären, was "useCapture" bezieht sich auf, und wie man richtig nutzen addEventListener in Scala.js?

+0

In Bezug auf 'useCapture 'stammt das folgende Snippet aus dem [Mozilla docs] (https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Parameters): " zeigt an, dass Ereignisse von Dieser Typ wird versandt ched zu dem registrierten Listener, bevor es an ein EventTarget darunter in der DOM-Struktur gesendet wird. " –

Antwort

7

Die Fehlermeldung Sie erhalten, ist ein ganz normaler Typ Fehler: addEventListener ein js.Function1[dom.Event, _] erwartet, aber Sie geben es eine js.Function1[dom.MouseEvent, _]. Da das erste Argument in der kontravarianten Position ist, gibt es keine Überprüfung.

Es gibt zwei Lösungen: Entweder Sie machen Ihre Funktion ein dom.Event nehmen, dass Sie dann zu dom.MouseEvent werfen, wie folgt aus:

canvas.addEventListener("click", { (e0: dom.Event) => 
    val e = e0.asInstanceOf[dom.MouseEvent] 
    ... 
}, false) 

oder Sie verwenden onclick, die genauer eingegeben wird:

canvas.onclick = { (e: dom.MouseEvent) => 
    ... 
} 
+0

'.addEventLsitener (" click ", (e: MouseEvent) => ???, false)' wird auch kompilieren. – Busti

1

Event capture is the process by which an EventListener registered on an ancestor of the event's target can intercept events of a given type before they are received by the event's target. Capture operates from the top of the tree, generally the Document, downward, making it the symmetrical opposite of bubbling which is described below. The chain of EventTargets from the top of the tree to the event's target is determined before the initial dispatch of the event. If modifications occur to the tree during event processing, event flow will proceed based on the initial state of the tree..

http://www.w3.org/TR/DOM-Level-2-Events/events.html#Events-flow-basic

window.addEventListener("click", function(){console.log('something1')}, false); 
window.addEventListener("click", function(){console.log('something2')}, true); 

Der Auftrag

etwas 2 (definiert erste, unter Verwendung von Einfang = true) sein

etwas 1 (definiert zweite Abfangsonde verwendet = true)

Ref 2

Hinweis zum zweiten Hinweis: Die Bestellung kann nicht garantiert werden!

Erfassungsphase

Der Prozess, bei dem ein Ereignis kann, bevor sie von dem Zielknoten gehandhabt von einem der Ziel Vorfahren gehandhabt werden wird.

REF 3

Verwandte Themen