0

我试图将一些 jquery 函数包装到 GWT,在 js 代码下运行,大小为 2。

var html="<div><p>paragraph</p><div>second</div></div>";
var size=$(html).get(0).children.length;
alert(size);

但在 GWT 代码下运行

 select(html).get(0).getChildCount();

只需返回0,select函数如下:

public class JQuery extends JavaScriptObject {
    protected JQuery() {
    }
    public static final native JQuery select(String selector) /*-{
        return $wnd.jQuery(selector);
    }-*/;
    public final native Element get(int index) /*-{
        return this.get(index) || null;
    }-*/;
}

我想知道为什么它只是从 JSNI 方法中丢失了子元素,以及这种包装的正确方法是什么,让它的行为与原生 jquery 完全相同?

谢谢。

- - - - - - -编辑 - - - - - - - - - - - - - - - - - - ----------------------

我在一个真正的 gwt 项目中测试了上面的 JSNI 代码,它工作正常,子元素从 js 返回到 java。但在 GwtTestCase 中存在问题。

public class JQueryTest extends GWTTestCase {
    @Override
    public String getModuleName() {
        return "com.jsnitest.JsniTest";
    }
    public void testSelectHtml() {
        ScriptInjector.fromUrl("http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js").setWindow(
                ScriptInjector.TOP_WINDOW).setCallback(new Callback<Void, Exception>() {
            @Override
            public void onFailure(Exception reason) {
            }

            @Override
            public void onSuccess(Void result) {
                int childCount = select("<div><p>paragraph</p><div>second</div><ul></ul></div>").get(0).getChildCount();
                //Fail! childCount=0
                assertEquals(3, childCount);
            }
        }).inject();
    }
}
4

1 回答 1

0

gwtquery又名 gQuery 是一个用 GWT 编写的类似 jQuery 的 API。

按照 DRY 的原则,我会使用这个库而不是包装 jQuery。

我看到在 GWT 中包装 jQuery 的唯一原因是,您需要 jQuery 中不存在于 gQuery 中的非常特定的功能,尽管 gQuery 几乎完成了 jQuery API。

于 2013-11-03T15:13:40.270 回答