8

私は、以下がGWTである種の同じであることを知っています:

Window and $wnd
Document and $doc

最初のものは Java で使用され、2 つ目は JSNI (JavaScript) で使用される以外に違いはありますか?

4

1 に答える 1

16

Windowブラウザ ウィンドウの特定のプロパティを取得または設定するために使用できる多数の静的メソッドのクラスですが、実際にはネイティブのブラウザ ウィンドウ オブジェクトではありません。これらのメソッドの実装は、最終的に変数をJSNI使用してこれらのプロパティを設定/取得するブロックになります。誰の実装が になるかのよう$wndに。ブラウザの window オブジェクトなどのすべてにアクセスできるわけではないことに注意してください。Window.alert()$wnd.alert()Window.javawindow.console

コンパイルされたコードが iframe で通常どおり実行されるため、GWT は$wnd代わりに を使用します。このコンテキストでは、親ウィンドウを参照しながら iframe ウィンドウを参照します。iframe 内の親ドキュメントへの参照でも同じことが起こります。windowwindow$wnd$doc

反対側にDocumentは、拡張する Java クラスがありますJavaScriptObject。これは、基本的にネイティブ JavaScript オブジェクトの特別なラッパーであることを意味するオーバーレイタイプであることを意味します。基礎となる JavaScript を変更するのではなく、相互作用する Java メソッドのセットを追加します。それと。jsni に渡すときに安全にキャストできます。

要約すると、 Java の世界では と は同じではありませんが、コンパイルすると同じになります。それ以外Documentの場合は のオーバーレイではなく、ブラウザ ウィンドウの特定のメソッドにアクセスする方法にすぎません。$docWindow$wnd

GWT でコンパイルされたコードはネイティブの js オブジェクトとメソッドに委任されますが、js と Java オブジェクトの類似点を見つけようとしないでください。GWT は、一連の Java オブジェクト、ウィジェット、パターンなどを使用して ajax アプリケーションを開発するための API を設計しました。一部のオブジェクトとメソッドは同じように名前が付けられていますが、ほとんどの API は異なります。ただし、Java をST-JSのように両方の世界の間に厳密な並列性を持つ javascript にコンパイルする他のプロジェクトがあり、 GWT はAPI が javascript とほぼ同じであるElementalと呼ばれる実験的なライブラリを提供します(Chrome でのみ利用可能です)。

于 2013-10-19T22:17:17.707 に答える