Ваадин-подсказка иногда не показывает.Что случилось?Как это показать программно? - PullRequest
0 голосов
/ 05 декабря 2018

Я использую большой 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, но и до того, как у меня возникли эти проблемы.

Большое спасибо.

...