2013-10-19 8 views
6

wiem, że po to jakaś taka sama w GWT:

Window and $wnd 
Document and $doc 

Czy są jakieś różnice, poza tym, że pierwszy jest używany w języku Java, a drugi w JSNI (JavaScript)?

Odpowiedz

11

Window to klasa obfitująca w metody statyczne, których można użyć do uzyskania lub ustawienia pewnych właściwości okna przeglądarki, ale w rzeczywistości nie jest to obiekt okna przeglądarki macierzystej. Te implementacje metod są ostatecznie JSNI blokami, które używają zmiennej $wnd do ustawiania/otrzymywania tych właściwości. Takich jak Window.alert(), których implementacja byłaby $wnd.alert(). Zauważ, że Window.java nie ma dostępu do wszystkiego w oknie przeglądarki obiektu jak window.console itp

GWT używa $wnd zamiast window ponieważ kod skompilowany jest wykonywany zazwyczaj w iframe, aw tym kontekście window będzie odwoływać się okno iframe podczas gdy $wnd odniesie się do okna nadrzędnego. To samo dzieje się z $doc, która jest odniesieniem w elemencie iframe do dokumentu nadrzędnego.

W drugiej Document to klasa Java, która rozciąga JavaScriptObject, oznacza to, że jest to rodzaj Overlay które w zasadzie oznacza, że ​​jest to specjalny wrapper dla rodzimej JavaScript Object, to nie zmienia stanowiącego podstawę JavaScript ale dodaje zestaw metod java do interakcji z nim. Można go bezpiecznie rzucać, przechodząc do jsni.

Podsumowując, chociaż Document i $doc nie są takie same w Javie świata, kiedy to opracowano będą takie same, inaczej Window nie jest to nakładka z $wnd, to jest po prostu sposobem na dostęp do niektórych metod przeglądarce okno.

Mimo że GWT skompilował delegowania kodu do natywnych obiektów i metod js, nie próbuj znajdować podobieństw między obiektami js i java. GWT zaprojektował API do tworzenia aplikacji ajaxowych przy użyciu zestawu obiektów java, widżetów, wzorców itp. Niektóre obiekty i metody są nazywane w ten sam sposób, ale prawie API jest inny. Istnieją jednak inne projekty, które kompilują java do javascript, który ma sztywną równoległość pomiędzy obydwoma światami, takimi jak ST-JS, a GWT dostarcza eksperymentalną bibliotekę o nazwie Elemental, której API jest prawie identyczne z javascript (jest dostępne tylko w Chrome).