将 JavaScript(JSNI) 注入 Cell Table DOM
Injecting JavaScript(JSNI) to Cell Table DOM
在我的应用程序中,我使用的是 GWT Cell Table,对于一些列 Header 我想添加 tooltip.Column Header 是通过使用 SafeHtml 和注入创建的JS 到单元格 table header 使用 JSNI。但是那个时候 DOM 没有创建并且 JavaScript 没有附加到 tooltip.If 的列 Header 我使用 Timer 然后问题就消失了,我不想要使用 Timer.Is 有什么方法可以注入 JS?有什么线索吗?请看下面的代码,
列Header 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'});
});
}-*/;
我在 table 创建后调用此 JSNI,但 DOM 仍未准备好。
即使我尝试在 onAttach() 方法中调用这个 JSNI 脚本,
@Override
protected void onAttach() {
super.onAttach();
initTooltip();
}
有什么建议吗?
我认为Scheduler也可能是一个解决方案。它会将 jsni 添加到下一个 JavaScript 循环的开头。
但我认为可能还有更好的解决方案,而不是使用 Timer 或 Scheduler。
更新
您的代码似乎有错误:
在 JSNI 中,document
需要被调用为 $doc
private static native void initTooltip() /*-{
$wnd.$($doc).ready(function(){
$wnd.jQuery("[rel=tooltipTop]").tooltip({ placement: 'top'});
});
}-*/;
我使用定时器来解决这个问题,
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
initTooltip();
}
});
感谢您的建议。
在我的应用程序中,我使用的是 GWT Cell Table,对于一些列 Header 我想添加 tooltip.Column Header 是通过使用 SafeHtml 和注入创建的JS 到单元格 table header 使用 JSNI。但是那个时候 DOM 没有创建并且 JavaScript 没有附加到 tooltip.If 的列 Header 我使用 Timer 然后问题就消失了,我不想要使用 Timer.Is 有什么方法可以注入 JS?有什么线索吗?请看下面的代码,
列Header 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'});
});
}-*/;
我在 table 创建后调用此 JSNI,但 DOM 仍未准备好。 即使我尝试在 onAttach() 方法中调用这个 JSNI 脚本,
@Override
protected void onAttach() {
super.onAttach();
initTooltip();
}
有什么建议吗?
我认为Scheduler也可能是一个解决方案。它会将 jsni 添加到下一个 JavaScript 循环的开头。
但我认为可能还有更好的解决方案,而不是使用 Timer 或 Scheduler。
更新
您的代码似乎有错误:
在 JSNI 中,document
需要被调用为 $doc
private static native void initTooltip() /*-{
$wnd.$($doc).ready(function(){
$wnd.jQuery("[rel=tooltipTop]").tooltip({ placement: 'top'});
});
}-*/;
我使用定时器来解决这个问题,
Scheduler.get().scheduleDeferred(new ScheduledCommand() {
@Override
public void execute() {
initTooltip();
}
});
感谢您的建议。