GWT JSNI内使用jQuery(Use jquery inside GWT jsni)

2019-08-31 07:08发布

我无法使用

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

从我的GWT JSNI函数内。 我想这

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

但这也不能正常工作。 我觉得我在这里失去了语法。 可能有人帮助

Answer 1:

对于这个问题的三种解决方案:

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查询又名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();


Answer 2:

一个简单的方法是用一个不起眼的eval。

public static native void eval(String toEval)/*-{
   return $wnd.eval(toEval);     
 }-*/;

然后,只需使用你的脚本

eval("$('#'" + profileId + ").offset().top" );

而且,由于被称为GWT代码里面,你可以认为这是你的代码作为一个安全的一个。



Answer 3:

我假设你在你的主页添加了jQuery库

正确的语法是

private native int myJquery() /*-{
    $wnd.$(function() {           //may be you forgot this line
   return   $wnd.$("#"+profileId).offset().top;
    });
}-*/;

假设你在使用jQuery刚刚起步GWT

我强烈暗示重量轻第三方库

GWTQuery



文章来源: Use jquery inside GWT jsni