我有一个应用程序,需要使用容器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函数。
答案 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!