Drei Lösungen für diese Frage:
1- Ihr JSNI Code sieht in Ordnung, außer, dass Sie es in der entsprechenden einzuschließen native Funktion und gibt ein Double (oder einen anderen Zahlentyp zurück, wenn gwt das Casting durchführen soll).
native double getTop(String profileId) /*-{
return $wnd.$("#" + profileId).offset().top;
}-*/;
Wenn Sie wollten Fehler sehen, durch Ihre UncaughExceptionHandler
Sie Ihren Code in einem $entry
Block
native double getTop(String profileId) /*-{
return $entry(function(data) {
return $wnd.$("#" + profileId).offset().top;
});
}-*/;
2- Aber statt mit jQuery wickeln sollte, ermutige ich Sie gwt-query aka gQuery zu verwenden. Du musst jQuery also nicht in deine .html laden und musst dich nicht mit jsni in deiner App beschäftigen.
Mit gQquery haben Sie fast die gleiche jQuery-Syntax, aber in Java, so dass Sie Typ sicher, Refactoring, Testen .... Aber auch, werden Sie Dutzende von Dienstprogrammen (einfachste Ajax, Versprechen, Selektoren, etc.) haben sind nicht im gwt-Kern.
gQuery ist eine leichtgewichtige Bibliothek, die in gwt komplett neu geschrieben wurde. Es ist KEIN Wrapper der jQuery-Bibliothek (wie in der anderen Antwort falsch gesagt), Sie müssen jquery.js nicht in Ihre Seiten aufnehmen.
Wie bei jeder anderen gwt-Bibliothek würde der gwt-Compiler alles entfernen, was Sie nicht von gquery verwenden. In Ihrem Ansatz muss Ihre App alle jquery-Sachen laden.
Also in Ihrem Fall, und mit diesem Code in Ihren .java Klassen gquery schreiben:
import static com.google.gwt.query.client.GQuery.*;
... onModuleLoad() {
int top = $("#"+profileId).offset().top;
}
3- Schließlich haben Sie die Möglichkeit, reinen GWT-Code mit dem Offset eines Elements zu erhalten, wenn Sie kennen seine ID:
int top = DOM.getElementById(profileId).getOffsetTop();
Was ist der gesamte Code Ihrer jsni-Methode (Rückgabetyp, Parameter usw.)? laden Sie jquery.js in Ihre index.html? Erhalten Sie einen Fehler, wenn Ihr Code ausgeführt wird? –