1

コンテナIDで渡す必要があるこのJSNIを持つアプリがあり、その中でDIVIDを渡します。

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
    });
}-*/;

これは正常に機能しますが、HTMLdivだけでなくGWTコンテナーを使用する必要があります。

私は試した:

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

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

ただし、Javascript関数は渡した要素IDを受け入れることができないため(サードパーティのJSライブラリを使用しているため、これをデバッグできません)、DIVIDを渡す必要があると想定しています。 DIVは問題ありませんが、GWTUIで表示/非表示などのように操作できるGWTウィジェットが必要です。

この場合、GWTパネル(HTMLPanelまたはVerticalPanel)のDIV要素とIDを取得して、これをJSNI関数に渡す方法はありますか。

4

1 に答える 1

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 の両方で動作します!

于 2012-10-26T16:48:33.057 に答える