我使用大型HTML画布绘制许多想法(正方形等)。当鼠标在画布上移动到“特殊”正方形时,应引发工具提示。因此,我在连接器方法 hasTooltip()中覆盖了该方法,该方法现在始终返回true。在客户端,我在画布上添加了 MouseMoveListener ,当鼠标光标移至正方形位置时,我在其中设置了 description 和 descriptionContentMode 具有底层方形和内容模式的工具提示字符串的连接器状态。同时, VTooltip#TooltipEventHandler 还获得一个 MouseMoveEvent ,启动显示计时器,依此类推。最后,启动延迟结束后,我可以看到我的工具提示。如果鼠标离开正方形,则将 description 和 descriptionContentMode 设置为 null ,工具提示消失。到目前为止,一切都很好。 但是在某些情况下,它不起作用。工具提示不可见。在调试过程中(调试mousemove-events确实很烦人),我得到了mousemove-event,但是tooltipeventhandler没有,因此它不启动其显示计时器,依此类推。因此,我尝试以编程方式显示工具提示,但没有成功。首先,我想“重新触发”我的mousemove事件,因此tooltipeventhandler可以重新进行操作:
final Canvas widget = myConnetor.getWidget();
// myConnetor.getConnection().getVTooltip().connectHandlersToWidget(
// widget );
DomEvent.fireNativeEvent(
pEvent.getNativeEvent().getNativeEvent(),
widget,
widget.getElement() );
工具提示处理程序接收事件,但是在方法 handleShowHide()中,它以第三行结尾:
// We can ignore move event if it's handled by move or over already
if (currentElement == element && handledByFocus) {
return;
}
我还尝试通过本机访问直接访问 VTooltip 中的方法 showTooltip(),因为它是私有的:
private native void showMyTooltip( final VTooltip pTooltip )
/*-{
pTooltip.showTooltip();
}-*/;
但是,当我在调试模式下启动Vaadin应用程序时,总是遇到未知方法 showTooltip()的错误。我试图找出本机调用可能出了什么问题,但是我对使用纯JavaScript的Vaadin客户端编码不是那么坚定。当我在Chrome浏览器中查看DevTools时,会看到以下内容:
function com_vaadin_client_VTooltip_$showTooltip__Lcom_vaadin_client_VTooltip_2V(this$static){
...
}
在我看来,有一种方法 showTooltip()。那我的电话怎么了? 有人对我还有什么想法吗?在我的第一次尝试中,我还可以尝试先触发模糊事件,因为在 onBlur()中 handledByFocus 设置为 false ,因此第3行将失败。 但是我最感兴趣的是如何找出为什么tooltipevent-handler有时无法获取mousemove-events并解决此问题。所有其他可能性都有些愚蠢,并且不是真的“安全”了较新的Vaadin版本等等。我使用Vaadin框架8.5.2,但在遇到这些问题之前。
非常感谢。