Я использую большой HTML-холст, чтобы рисовать много мыслей (квадратов и т. Д.).Когда мышь перемещается на холсте до «специальных» квадратов, всплывающая подсказка должна быть поднята.Поэтому я переопределил в своем методе коннектора hasTooltip () , что теперь он всегда возвращает true.На стороне клиента я добавил MouseMoveListener к своему холсту, и когда курсор мыши перемещается в положение квадрата, я устанавливаю description и descriptionContentMode в состоянии соединителяс помощью строки всплывающей подсказки нижележащего квадрата и режима содержимого.Параллельно VTooltip # TooltipEventHandler также получает MouseMoveEvent , запускает таймер шоу и так далее.В конце, после того, как задержка начала закончена, я вижу свою подсказку.Если мышь покидает квадрат, я устанавливаю description и descriptionContentMode в null , и всплывающая подсказка исчезает.Все идет нормально.Но в некоторых случаях это не работает.Подсказка не видна.Во время отладки (а отладка mousemove-событий действительно раздражает) похоже, что я получаю свое mousemove-событие, но tooltipeventhandler не получает, поэтому он не запускает свой таймер показа и так далее.Поэтому я попытался показать подсказку программно, но безуспешно.Сначала я подумал «перезапустить» событие mousemove, чтобы обработчик всплывающих подсказок мог воспроизвести:
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;
}
Я также пытался получить доступ к методу showTooltip () в VTooltip напрямую через собственный доступ, поскольку он является закрытым:
private native void showMyTooltip( final VTooltip pTooltip )
/*-{
pTooltip.showTooltip();
}-*/;
Но всегда я получаю ошибку неизвестного метода showTooltip () при запуске приложения Vaadin в режиме отладки.Я пытался выяснить, что может быть не так с моим родным вызовом, но я не настолько тверд, кодирую клиентскую часть Vaadin с помощью чистого JavaScript.Когда я смотрю на DevTools в Chrome, я вижу что-то вроде этого:
function com_vaadin_client_VTooltip_$showTooltip__Lcom_vaadin_client_VTooltip_2V(this$static){
...
}
Мне кажется, что существует метод showTooltip () .Так что не так с моим звонком?У кого-нибудь есть идеи, что еще я мог бы сделать?В моих первых попытках я также мог сначала попытаться запустить событие размытия, потому что в onBlur () handledByFocus установлено в false , поэтому условие в строке 3 будетпотерпеть поражение.Но меня больше всего интересует, как выяснить, почему tooltipevent-handler иногда не получает mousemove-события, и решить эту проблему.Все остальные возможности немного глупы и не совсем «безопасны», снова новые версии Vaadin и так далее.Я использую Vaadin Framework 8.5.2, но и до того, как у меня возникли эти проблемы.
Большое спасибо.