我无法使用
$("#"+profileId).offset().top
从我的gwt jsni函数里面.我试过了
$wnd.$("#"+profileId).offset().top
但这也不行.我觉得我在这里缺少语法.有人可以帮忙吗
解决方法
这个问题的三个解决方案:
1-你的Jsni代码看起来很好,除了你必须将它包含在相应的本机函数中,并返回一个double(或任何其他数字类型,如果你想要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.所以你不必在你的.html中加载jQuery,而不需要在你的应用程序中处理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();