我无法使用
$("#"+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查询又名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();
一个简单的方法是用一个不起眼的eval。
public static native void eval(String toEval)/*-{
return $wnd.eval(toEval);
}-*/;
然后,只需使用你的脚本
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
。
我强烈暗示重量轻第三方库
GWTQuery