Три решения для этого вопроса:
1- Ваш код JSNI выглядит отлично, за исключением, что вы должны заключить его в соответствующем (или любой другой тип номера, если вы хотите, чтобы gwt выполнял кастинг).
native double getTop(String profileId) /*-{
return $wnd.$("#" + profileId).offset().top;
}-*/;
Если вы хотите, чтобы увидеть ошибки через ваш UncaughExceptionHandler
вы должны обернуть свой код в $entry
блоке
native double getTop(String profileId) /*-{
return $entry(function(data) {
return $wnd.$("#" + profileId).offset().top;
});
}-*/;
2- Но, вместо того, чтобы использовать JQuery, я рекомендую вам использовать gwt-query ака gQuery. Поэтому вам не нужно загружать jQuery в ваш .html, и вам не нужно иметь дело с jsni в вашем приложении.
С gQquery у вас почти такой же синтаксис jQuery, но в java, поэтому у вас есть тип безопасного, рефакторинга, тестирования ... Но также у вас будут десятки утилит (простейшие ajax, обещания, селекторы и т. Д.), Которые не находятся в ядре gwt.
gQuery - это небольшая библиотека, полностью переписанная с нуля в gwt. Он не является оберткой библиотеки jQuery (как неправильно сказано в другом ответе), вам не нужно включать jquery.js на свои страницы.
Как и в любой другой библиотеке gwt, компилятор gwt избавится от всего, что вы не используете из gquery. В вашем подходе ваше приложение должно загружать все файлы jquery.
Так что в вашем случае, и используя gquery написать этот код в классах .java:
import static com.google.gwt.query.client.GQuery.*;
... onModuleLoad() {
int top = $("#"+profileId).offset().top;
}
3- Наконец, у вас есть возможность использовать чистый код GWT, чтобы получить смещение элемента, если вы знаете его id:
int top = DOM.getElementById(profileId).getOffsetTop();
Что такое весь код вашего метода jsni (тип возврата, параметры и т. Д.)? вы загружаете jquery.js в свой index.html? Вы получаете какую-либо ошибку, когда ваш код выполнен? – 2013-04-16 11:51:26