Каретка на textInput никогда не уходит - PullRequest
0 голосов
/ 29 января 2011

У меня есть форма входа с различными textInputs и кнопка отправки. Если вы предоставите правильные учетные данные для входа в систему, система выгружает представление входа в систему и загружает представление приложения. Довольно стандартный. К сожалению, я заметил эту странную ошибку, когда вы наводите курсор мыши на одно из полей textInput с помощью мыши, затем заполняете форму, используя только клавиатуру (и оставляете мышь припаркованной над textInput), а затем вкладываете кнопку отправки и нажмите клавишу пробела, т. е. войдите через клавиатуру, курсор мыши останется кареткой в ​​новом представлении, независимо от того, что вы делаете (перемещаете, щелкаете), пока не найдете другой textInput для отмены состояния курсора.

Я пытался делать разные вещи через CursorManager, но, похоже, ничего не получилось. Я попытался отправить события ROLL_OUT или MOUSE_OUT в textInput, но это тоже не сработало.

Я пытался воспроизвести это на небольшом примере и не смог, что, как я понимаю, значительно облегчает мне задачу. Хотелось бы услышать, сталкивался ли кто-нибудь с чем-то подобным или слышать о каких-либо указателях, которые могут звучать как связанные.

спасибо!

F

Ответы [ 3 ]

1 голос
/ 03 сентября 2012

У меня была точно такая же проблема. Вот мой вид экрана входа в систему:

<fx:Style>
    @namespace s "library://ns.adobe.com/flex/spark";
    @namespace mx "library://ns.adobe.com/flex/mx";
    .textInput
    {
        showErrorTip : true;
        showErrorSkin : true;
    }
</fx:Style>
<fx:Declarations>
    <mx:StringValidator id="usernameValidator" source="{username}" property="text"
                        trigger="{signinButton}" triggerEvent="click" required="true" />
    <mx:StringValidator id="passwordValidator" source="{password}" property="text"
                        trigger="{signinButton}" triggerEvent="click" required="true"/> 
</fx:Declarations>
<fx:Script>
    <![CDATA[
        import info.thwm.appx.model.vo.LoginVO;
        import info.thwm.appx.view.events.ViewEvent;

        import mx.validators.Validator;

        public static const NAME:String = "LoginView";
        [Bindable] public var loginVO:LoginVO = new LoginVO();

        private function init():void{
            focusManager.setFocus( username );
            sendEvent( ViewEvent.VIEW_CREATED, NAME );
        }

        private function sendEvent( type:String, data:Object=null ):void{
            dispatchEvent( new ViewEvent( type, data ) );
        }

        private function loginUser(event:MouseEvent = null):void{
            var validators:Array = [usernameValidator, passwordValidator];
            var errors:Array;
            errors = Validator.validateAll(validators);
            if (errors.length == 0){                                        
                sendEvent( ViewEvent.BTN_LOGIN_CLICK, loginVO );
            }                               
        }
    ]]>
</fx:Script>

<s:Panel width="320" height="230" title="Sign In">
<s:layout>
    <s:VerticalLayout/>
</s:layout>
<s:Form id="form1" styleName="formStyle" defaultButton="{signinButton}">            <s:layout>
            <s:FormLayout paddingLeft="25" gap="-5"/>
        </s:layout>
        <s:FormItem label="Username" required="true" skinClass="info.thwm.appx.view.skins.FormItemSkin">
            <s:TextInput id="username" text="@{loginVO.username}" styleName="textInput"/>
        </s:FormItem>
        <s:FormItem label="Password" required="true" skinClass="info.thwm.appx.view.skins.FormItemSkin">
            <s:TextInput displayAsPassword="true" id="password" text="@{loginVO.password}" styleName="textInput"/>
        </s:FormItem>
        <s:FormItem>
            <s:CheckBox label="Remember" id="remember" selected="@{loginVO.remember}"/>
        </s:FormItem>
        <s:FormItem>
            <s:Button label="Sign In" id="signinButton" click="loginUser(event)"/>
        </s:FormItem>
    </s:Form>
    <s:controlBarContent>
        <s:HGroup width="100%" verticalAlign="middle">
            <s:Button label="Register" id="registerButton" click="sendEvent( ViewEvent.BTN_REGISTER_CLICK );" />
            <s:Label buttonMode="true" color="#57595A" text="Forgot your username or password?" click="sendEvent( ViewEvent.BTN_PSW_REMINDER_CLICK );"/>
        </s:HGroup>
    </s:controlBarContent>
</s:Panel>

Ничего особенного в этом нет, но если я выбираю поле имени пользователя с помощью мыши, а затем использую только клавиатуру для остальных, как только я доберусь до следующего просмотра, курсор мыши станет входной кареткой. Единственным выходом было добавить эту строку «Mouse.cursor = MouseCursor.ARROW» в функцию события onCreationComplete следующего представления.

0 голосов
/ 01 февраля 2011

После разборки моего приложения почти до голых тел я заметил, что свойство text моих textInputs связано с полем другой переменной.Я не уверен, почему это создаст проблему, описанную выше, но устранение этой привязки решило проблему.Хотелось бы провести больше исследований по этому вопросу, но, к сожалению, это уже заняло слишком много времени.

0 голосов
/ 01 февраля 2011

Попробуйте явно установить фокус на другой объект?Смотри UIComponent.setFocus()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...