1

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

HTML:

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

爪哇:

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 中的显示/隐藏/等那样操作它。

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

4

1 回答 1

0

一定是与您调用方法的顺序或使用第 3 方库有关的一些错误。此代码在 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!

于 2012-10-26T16:48:33.057 回答