获取GWT Panel的内部DIV元素和id

时间:2012-10-25 11:58:25

标签: java javascript gwt jsni

我有一个应用程序,需要使用容器ID传递此JSNI,我在其中传递DIV ID:

HTML:

<div class='example-waveform' id='example4'></div>

JAVA:

initWave("example4");

public native void initWave(String __id)/*-{
    var instance = this;
    var data = $wnd.data = [];
    var waveform = $wnd._waveform = new $wnd.Waveform({
        container: $doc.getElementById(__id),
        interpolate: false
    });
}-*/;

这很好用,但是我需要使用GWT容器而不仅仅是HTML div。

我试过了:

HTMLPanel container = new HTMLPanel("Test");
container.getElement().setId("someid");

String id = container.getElement().getId();
initWave(id);

然而,Javascript函数无法接受我传递给它的元素id(我正在使用第三方JS库,所以我无法调试这个)所以我只是假设我只需要传递DIV id,但是DIV没问题,但是我需要一个GWT小部件,我可以像GWT UI中的show / hide / etc一样操作。

在这种情况下,有没有办法获取GWT Panel(HTMLPanel或VerticalPanel)的DIV元素和id,所以我可以将它传递给我的JSNI函数。

1 个答案:

答案 0 :(得分:0)

必须是与调用方法的顺序或使用第三方库相关的一些错误。这段代码在GWT 2.4.0中运行得非常好。:

final HTMLPanel container = new HTMLPanel("Test");
container.getElement().setId("someid");

container.addAttachHandler(new Handler() {

    @Override
    public void onAttachOrDetach(AttachEvent event) {
        initWave(container.getElement().getId());
    }});

RootPanel.get().add(container);

使用initWave:

public native void initWave(String __id)/*-{
    var x = $doc.getElementById(__id);
    alert(x.innerHTML);
}-*/;

适用于SimplePanel和HTMLPanel!