2013-11-03 28 views
0

我试图总结一些jQuery的功能,GWT,下面JS代码运行,大小为2GWT JSNI:通JS GWT的元素元素将失去所有的孩子

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(); 
    } 
} 

回答

0

gwtquery又名gQuery是写在GWT一个jQuery状API。

遵循DRY原则,我会使用这个库而不是包装jQuery。

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

+0

其实我确实使用gwtquery,它是我们项目中必备的第三个库,我非常感谢你在gwtquery上的精彩工作。我问这个问题的原因是我正在研究GWT的JSNI,并希望看到JSNI的特性,我的问题中的JSNI代码是在GWTTestCase中完成的,不知道这是否是问题的原因。 – Mike

+0

所以你可以发布一些关于你想用你的jsni方法返回的对象的java代码吗? –

+0

问题只存在于'GwtTestCase'中,问题已更新。 – Mike