jquery - 在 GWT jsni 中使用 jquery

标签 jquery gwt jsni gwtquery

我无法使用

$("#"+profileId).offset().top

来 self 的 gwt jsni 函数。我试过这个

$wnd.$("#"+profileId).offset().top

但这也不起作用。我觉得我在这里缺少语法。有人可以帮忙吗

最佳答案

此问题的三个解决方案:

1-您的 Jsni 代码看起来不错,只是您必须将其包含在相应的 native 函数中并返回 double(如果您希望 gwt 进行转换,则返回任何其他数字类型)。

 native double getTop(String profileId) /*-{
   return $wnd.$("#" + profileId).offset().top;
 }-*/;

如果您想通过 UncaughExceptionHandler 查看错误,您应该将代码包装在 $entry block 中

native  double getTop(String profileId) /*-{
  return $entry(function(data) {
    return $wnd.$("#" + profileId).offset().top;
  });
}-*/;

2- 但是,我鼓励您使用 gwt-query,而不是使用 jQuery。又名 gQuery。因此,您不必在 .html 中加载 jQuery,也不需要在应用程序中处理 jsni。

使用 gQquery,您可以使用与 Java 几乎相同的 jQuery 语法,因此您可以进行类型安全、重构、测试...。而且,您还将拥有数十个实用程序(最简单的 ajax、promise、选择器等),它们是不在 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-最后,如果您知道元素的 id,您可以选择使用纯 gwt 代码来获取元素的偏移量:

int top = DOM.getElementById(profileId).getOffsetTop();

关于jquery - 在 GWT jsni 中使用 jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16030089/

相关文章:

javascript - Jquery html 在最后插入

java - (类型错误) : Blob is not a constructor

javascript - Firefox 中 javascript RegExp 的奇怪行为

java - 获取带有玻璃的 GWT PopupPanel 淡入淡出

gwt-query - 嵌套可拖动传播

GWT 动态语言环境

GWT 同步调用

Javascript API - 可选 js sdk 模块未定义

javascript - JQuery 文件上传未重置

jquery - 如何让我的 jQuery UI "close"按钮显示在 DIV 的右上角而不妨碍文本的流动?