tre soluzioni per questa domanda:
1- Il codice JSNI guarda bene, tranne che bisogna racchiuderlo tra il corrispondente funzione nativa e restituisce un doppio (o qualsiasi altro tipo di numero se vuoi che gwt effettui il casting).
native double getTop(String profileId) /*-{
return $wnd.$("#" + profileId).offset().top;
}-*/;
Se si voleva vedere gli errori attraverso il vostro UncaughExceptionHandler
si dovrebbe avvolgere il codice in un blocco $entry
native double getTop(String profileId) /*-{
return $entry(function(data) {
return $wnd.$("#" + profileId).offset().top;
});
}-*/;
2- Ma, invece di usare jQuery, vi incoraggio a utilizzare gwt-query aka gQuery. Quindi non devi caricare jQuery nel tuo .html e non hai bisogno di gestire jsni nella tua app.
Con gQquery hai quasi la stessa sintassi jQuery ma in java, quindi hai digitato sicuro, refactoring, test .... Ma inoltre, avrai dozzine di utilità (ajax, promesse, selettori, ecc. non sono nel nucleo del gwt.
gQuery è una libreria leggera, completamente riscritta da zero in gwt. NON è un wrapper della libreria jQuery (come è erroneamente detto nell'altra risposta), non devi includere jquery.js nelle tue pagine.
Come con qualsiasi altra libreria gwt, il compilatore gwt eliminerebbe tutto ciò che non si usa da gquery. Nel tuo approccio, la tua app deve caricare tutte le cose jquery.
Quindi nel tuo caso, e l'utilizzo di gquery scrivere questo codice nelle classi .java:
import static com.google.gwt.query.client.GQuery.*;
... onModuleLoad() {
int top = $("#"+profileId).offset().top;
}
3- Infine, si ha la possibilità di utilizzare il codice GWT puro per ottenere l'offset di un elemento, se si conosce il suo ID:
int top = DOM.getElementById(profileId).getOffsetTop();
qual è l'intero codice del metodo jsni (tipo di ritorno, parametri ecc.)? stai caricando jquery.js nel tuo index.html? Ricevi qualche errore quando il tuo codice viene eseguito? –