2013-10-19 14 views
6

So che quanto segue è una sorta dello stesso in GWT:

Window and $wnd 
Document and $doc 

ci sono differenze, oltre che il primo viene utilizzato in Java e la seconda in JSNI (JavaScript)?

risposta

11

Window è una classe ricca di metodi statici, che è possibile utilizzare per ottenere o impostare determinate proprietà della finestra del browser, ma in realtà non è l'oggetto finestra browser nativo. Queste implementazioni del metodo sono eventualmente blocchi JSNI che utilizzano la variabile $wnd per impostare/ottenere tali proprietà. Come Window.alert() la cui implementazione sarebbe $wnd.alert(). Si noti che Window.java non hanno accesso per tutto in oggetto la finestra del browser come window.console ecc

GWT utilizza $wnd invece di window perché il codice compilato viene eseguito normalmente in un iframe, e in questo contesto, window farà riferimento alla finestra iframe mentre $wnd farà riferimento alla finestra principale. Lo stesso accade con $doc che è un riferimento nell'iframe al documento genitore.

Nell'altro lato Document è una classe Java che estende JavaScriptObject, significa che si tratta di un tipo Overlay che sostanzialmente significa che è un involucro speciale per un oggetto JavaScript nativo, non modifica il JavaScript sottostante, ma aggiunge un set di metodi java per interagire con esso. Può essere lanciato in modo sicuro quando passa a jsni.

In sintesi, anche se Document e $doc non sono gli stessi nel mondo Java, quando viene compilato saranno lo stesso, altrimenti Window non è una sovrapposizione di $wnd, è solo un modo per accedere a determinati metodi del browser finestra.

Sebbene GWT abbia compilato i delegati di codice in oggetti e metodi js nativi, non provare a trovare somiglianze tra oggetti js e java. GWT ha progettato un'API per sviluppare applicazioni ajax utilizzando un insieme di oggetti java, widget, pattern, ecc. Alcuni oggetti e metodi sono denominati nello stesso modo, ma quasi l'API è diversa. Tuttavia, altri progetti che compongono java in javascript con un rigido parallelismo tra i due mondi come ST-JS e GWT forniscono una libreria sperimentale chiamata Elemental la cui API è quasi identica a javascript (è disponibile solo per Chrome).

Problemi correlati