2011-01-29 2 views
0

다양한 textInputs 및 제출 버튼이있는 로그인 양식이 있습니다. 적절한 로그인 자격 증명을 제출하면 시스템이 로그인보기를 언로드하고 앱보기를로드합니다. 꽤 표준. 불행히도이 이상한 버그를 발견했습니다. 마우스로 textInput 상자 중 하나에 마우스를 가져간 다음 키보드 만 사용하여 양식을 채우고 (마우스를 textInput 위에 놓은 상태로두고) 제출 탭으로 이동합니다. 버튼을 누르고 스페이스 바를 누르십시오. 즉, 키보드를 통해 로그인하면 커서 상태를 취소하기 위해 다른 textInput을 찾을 때까지 마우스 커서는 새로운 뷰에서 캐럿을 유지합니다 (이동, 클릭).캐럿 on textInput은 결코 사라지지 않습니다

나는 CursorManager를 통해 모든 종류의 작업을 수행하려고 시도했지만 아무 것도 그 트릭을 수행하지 않는 것 같습니다. 나는 이벤트 ROLL_OUT 또는 MOUSE_OUT 이벤트를 textInput에 전달하려고했지만 트릭도하지 않습니다.

작은 예제에서 이것을 재현하려고 시도했지만, 그렇게 할 수 없었습니다. 누군가가 비슷한 소리를 들었거나 연결된 소리가 나는 포인터가 있으면들을 수 있습니다.

감사합니다.

f

+0

샘플을 요청하려고했습니다. 재현성있는 코드를 생성 할 수 없기 때문에 코드에 코드가 존재하지 않는지 궁금합니다. 이 프로젝트가 종료 될 때까지 프로젝트 사본을 만들고 천천히 삭제하는 것이 좋습니다. – JeffryHouser

+0

옙 ... 나는 당신이 절대적으로 옳았다 고 생각합니다. 나는 천천히 왜 그런 일이 일어나고 있는지 알았지 만, 왜 아직도 일어나고 있는지 확신 할 수 없다. 내 발견을 잠깐 게시 할 것입니다. –

답변

0

내 사과를 거의 베어 본 뼈까지 내린 후, 내 textInputs의 텍스트 속성이 다른 변수의 필드에 바인딩되어 있음을 발견했습니다. 왜 이것이 위에서 설명한 문제를 만들지는 모르겠지만 바인딩을 사용하여 문제를 해결했습니다. 이 문제에 대해 더 많은 연구를 해보고 싶지만, 슬프게도 이미 너무 많은 시간이 걸렸습니다.

0

다른 개체에 포커스를 명시 적으로 설정 하시겠습니까? UIComponent.setFocus()

+0

제안에 감사드립니다. 불행히도 그 트릭을하지 않는 것 같습니다. –

1

나는 정확히 같은 문제가있었습니다. 여기 내 로그인 화면이다 : 그것에 대해 특별한

<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> 

아무것도,하지만 난 마우스로 사용자 이름 필드를 선택하고 만, 나머지 키보드를 사용하는 경우 최대한 빨리 다음보기 마우스 커서에 도착으로 입력 캐럿이된다. 그 주위의 유일한 방법은 다음 뷰의 onCreationComplete 이벤트 함수에서이 줄 "Mouse.cursor = MouseCursor.ARROW"를 추가하는 것입니다.

관련 문제