2013-10-19 4 views
6

Ich weiß, dass die folgende ist eine Art derselben in GWT:

Window and $wnd 
Document and $doc 

Gibt es Unterschiede, neben, dass die erste in Java und die zweite verwendet wird in JSNI (JavaScript)?

Antwort

11

Window ist eine Klasse viele statische Methoden, die Sie zum Abrufen oder Festlegen bestimmter Eigenschaften des Browserfensters verwenden können, aber tatsächlich ist es nicht das native Browserfensterobjekt. Diese Methodenimplementierungen sind schließlich JSNI Blöcke, die die $wnd Variable verwenden, um diese Eigenschaften festzulegen/abzurufen. Wie Window.alert() deren Implementierung wäre $wnd.alert(). Beachten Sie, dass Window.java keinen Zugriff hat für alles, was im Fenster Objekt Browser wie window.console usw.

GWT verwendet $wnd statt window weil kompilierten Code normalerweise in einem Iframe ausgeführt wird, und in diesem Zusammenhang window das iframe Fenster verweisen während $wnd wird das übergeordnete Fenster verweisen. Das gleiche passiert mit $doc, die eine Referenz im iframe zum übergeordneten Dokument ist.

In der anderen Seite Document ist eine Java-Klasse, die JavaScriptObject erstreckt, bedeutet dies, dass es sich um eine Overlay Art, die im Grunde bedeutet, dass es sich um eine spezielle Wrapper für ein native Javascript-Objekt ist, ist es das zugrunde liegende JavaScript nicht ändern, sondern ein fügt eine Reihe von Java-Methoden, um damit zu interagieren. Es kann sicher gegossen werden, wenn es an jsni übergeben wird.

Zusammengefasst obwohl Document und $doc in Java-Welt nicht gleich sind, wenn es kompiliert wird sie gleich sein, sonst Window es ist nicht eine Überlagerung von $wnd, es ist nur eine Möglichkeit, bestimmte Methoden des Browsers zugreifen Fenster.

Obwohl GWT Codedelegaten für native js-Objekte und -Methoden kompiliert hat, versuchen Sie nicht, Ähnlichkeiten zwischen js- und Java-Objekten zu finden. GWT hat eine API entwickelt, um AJAX-Anwendungen mit einer Reihe von Java-Objekten, Widgets, Mustern usw. zu entwickeln. Einige Objekte und Methoden werden auf die gleiche Weise benannt, aber fast die API ist anders. Es gibt jedoch andere Projekte, die Java zu Javascript kompilieren, das eine starre Parallelität zwischen beiden Welten wie ST-JS hat, und GWT stellt eine experimentelle Bibliothek zur Verfügung, die Elemental genannt wird, deren API fast identisch mit Javascript ist (es ist nur für Chrome verfügbar).

Verwandte Themen