jav*_*ner 11 jquery gwt jsni gwtquery
我无法使用
$("#"+profileId).offset().top
Run Code Online (Sandbox Code Playgroud)
从我的gwt jsni函数里面.我试过这个
$wnd.$("#"+profileId).offset().top
Run Code Online (Sandbox Code Playgroud)
但这也行不通.我觉得我在这里缺少语法.可以有人帮忙吗
Man*_*ino 13
这个问题的三个解决方案:
1-你的Jsni代码看起来很好,除了你必须将它包含在相应的本机函数中并返回一个double(或任何其他数字类型,如果你想让gwt进行转换).
native double getTop(String profileId) /*-{
return $wnd.$("#" + profileId).offset().top;
}-*/;
Run Code Online (Sandbox Code Playgroud)
如果你想通过你看到错误,UncaughExceptionHandler你应该将代码包装在一个$entry块中
native double getTop(String profileId) /*-{
return $entry(function(data) {
return $wnd.$("#" + profileId).offset().top;
});
}-*/;
Run Code Online (Sandbox Code Playgroud)
2-但是,我鼓励你使用gwt-query aka gQuery ,而不是使用jQuery .所以你不必在你的.html中加载jQuery,你不需要在你的应用程序中处理jsni.
使用gQquery,你有几乎相同的jQuery语法,但在java中,所以你有类型安全,重构,测试....但是,你将有许多实用程序(最简单的ajax,promises,selectors等)不在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;
}
Run Code Online (Sandbox Code Playgroud)
3-最后,如果你知道它的id,你可以选择使用纯gwt代码来获取元素的偏移量:
int top = DOM.getElementById(profileId).getOffsetTop();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11551 次 |
| 最近记录: |