Я не могу использовать
$("#"+profileId).offset().top
из моей функции gwt jsni. Я попробовал это
$wnd.$("#"+profileId).offset().top
но это также не работает. Я чувствую, что здесь отсутствует синтаксис. Кто-нибудь может помочь
Я не могу использовать
$("#"+profileId).offset().top
из моей функции gwt jsni. Я попробовал это
$wnd.$("#"+profileId).offset().top
но это также не работает. Я чувствую, что здесь отсутствует синтаксис. Кто-нибудь может помочь
Три решения по этому вопросу:
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 aka gQuery. Поэтому вам не нужно загружать jQuery в ваш .html, и вам не нужно иметь дело с jsni в вашем приложении.
С gQquery у вас почти такой же синтаксис jQuery, но в java, поэтому у вас есть тип безопасного, рефакторинга, тестирования... Но также у вас будут десятки утилит (простейший ajax, promises, селектор и т.д.), которые не находятся в ядре 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();
Легкий способ - с скромной оценкой.
public static native void eval(String toEval)/*-{
return $wnd.eval(toEval);
}-*/;
Затем просто используйте script
eval("$('#'" + profileId + ").offset().top" );
И поскольку он вызван внутри вашего кода GWT, вы можете считать его своим кодом как безопасным.
Я предполагаю, что вы добавили библиотеку jquery на странице хоста.
Правильный синтаксис
private native int myJquery() /*-{
$wnd.$(function() { //may be you forgot this line
return $wnd.$("#"+profileId).offset().top;
});
}-*/;
И если вы только начали использовать jquery в GWT
.
Я настоятельно предлагаю небольшую стороннюю библиотеку