将JavaScript(JSNI)注入Cell Table DOM

时间:2015-04-01 16:24:26

标签: java gwt

在我的应用程序中,我正在使用GWT Cell Table,对于某些列标题,我想添加tooltip.Column Header是使用SafeHtml创建的,并使用JSNI将JS注入到单元格表头。但是那个时候DOM没有创建而且JavaScript没有附加到工具提示列Header。如果我使用Timer然后问题就会消失,我不想使用Timer.Is有什么方法可以注入JS吗?任何线索?见下面的代码,

列标题SafeHtml:

SafeHtml="<span>Total</span><span title='' rel='tooltipTop' class='reqFull' data-original-title='{0}'> <i class='fa fa-info-circle'></i></span>";

JSNI:

 private static native void initTooltip() /*-{
    $wnd.$(document).ready(function(){
         $wnd.jQuery("[rel=tooltipTop]").tooltip({ placement: 'top'});
    });

    }-*/;

我在创建表之后调用了这个JSNI,但是DOM还没准备好。 即便我尝试在onAttach()方法中调用这个JSNI脚本,

@Override
    protected void onAttach() {
        super.onAttach();
        initTooltip();
        }

有任何建议吗?

2 个答案:

答案 0 :(得分:1)

我认为Scheduler也可能是一种解决方案。它会将jsni添加到下一个JavaScript循环的开头。

但我认为仍然可能有更好的解决方案,而不是使用Timer或Scheduler。

<强>更新

您的代码中似乎有错误:

在JSNI中,document需要为$doc

private static native void initTooltip() /*-{
    $wnd.$($doc).ready(function(){
        $wnd.jQuery("[rel=tooltipTop]").tooltip({ placement: 'top'});
    });
}-*/;

答案 1 :(得分:0)

我使用计时器来解决此问题,

Scheduler.get().scheduleDeferred(new ScheduledCommand() {
            @Override
            public void execute() {
                initTooltip();
            }
        });

感谢您的建议。