Flex: принудительно отображать errorTip элемента управления (error toolTip) при ошибке проверки - PullRequest
3 голосов
/ 19 ноября 2009

Когда Validator (т. Е. StringValidator, NumberValidator и т. Д.) Отправляет недопустимое событие из-за ошибки проверки, свойство errorString исходного элемента управления (т. Е. TextInput) устанавливается в непустую строку, которая создает красную рамку вокруг элемента управления и показывает всплывающую подсказку (errorTip) ТОЛЬКО при наведении курсора мыши на элемент управления.

Вопрос. Можете ли вы принудительно вызвать всплывающую подсказку (errorTip), вместо того, чтобы ждать, пока пользователь наведет курсор на элемент управления? Если да, то как?

Ответы [ 2 ]

7 голосов
/ 10 декабря 2009

Статья Арала Балкана, ссылка на которую содержится в ответ Здмитрива - хорошее чтение и пропагандирует лучшее общее взаимодействие с пользователем для проверки.

Если вы просто хотите «вызвать» всплывающую подсказку об ошибке, вот что я делаю:

    public function showErrorImmediately(target:UIComponent):void
    {
        // we have to callLater this to avoid other fields that send events
        // that reset the timers and prevent the errorTip ever showing up.
        target.callLater(showDeferred, [target]);
    }

    private function showDeferred(target:UIComponent):void
    {
        var oldShowDelay:Number = ToolTipManager.showDelay;
        ToolTipManager.showDelay = 0;
        if (target.visible)
        {
            // try popping the resulting error flag via the hack 
            // courtesy Adobe bug tracking system
            target.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OUT));
            target.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OVER));
        }
        ToolTipManager.showDelay = oldShowDelay;
    }

    public function clearErrorImmediately(target:UIComponent):void
    {
        target.callLater(clearDeferred, [target]);
    }

    private function clearDeferred(target:UIComponent):void
    {
        var oldDelay:Number = ToolTipManager.hideDelay;
        ToolTipManager.hideDelay = 0;
        if (target.visible)
        {
            // clear the errorTip
            try
            {
                target.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OVER));
                target.dispatchEvent(new MouseEvent(MouseEvent.MOUSE_OUT));
            }
            catch (e:Error)
            {
                // sometimes things aren't initialized fully when we try that trick
            }
        }
        ToolTipManager.hideDelay = oldDelay;
    }
0 голосов
/ 19 ноября 2009
...