2013-03-04 21 views
0

我有一個簡單的登錄表單,用戶輸入userSAP否(必須是數字)和密碼(最少8個字符)。我已經爲每個字段進行了驗證。我想檢查驗證是否在它從LoginMode_Default狀態改變爲PerviewMode狀態之前通過。 用戶登錄後,會向用戶顯示歡迎信息。Flex:如何在驗證有效後更改登錄表單中的狀態?

在我的代碼中,當用戶單擊登錄按鈕時,我調用validateLogin()函數檢查字段是否有效。如果有效,則將currentState設置爲PerviewMode狀態。

在PerviewMode用戶可以點擊註銷,這就要求註銷()函數返回到LoginMode_Default狀態。

然而,當我點擊退出鏈接,它可以追溯到登錄表單,但用戶名和密碼字段被概括爲紅色。我怎樣才能回到登錄表單沒有領域變得紅色?我做得對嗎?有沒有更好或正確的方法來做到這一點?有人能幫我解決這個問題嗎?謝謝:)

我的驗證碼

<fx:Declarations>  
    <s:NumberValidator id="userSAPValidator" 
         property="text" 
         required="true" 
         domain="int" 
         notAnIntegerError="Should not conatin any decimal" 
         allowNegative="false" 
         negativeError="Should not contain negative values" 
         parseError="Enter only numbers without space" 
         source="{userSAP_field}"/> 

    <mx:StringValidator id="userPasswordValidator"       
         property="text"              
         required="true"       
         minLength="8"       
         tooShortError="password must at least be 8 characters" 
         source="{userPassword_field}"/>   
</fx:Declarations> 

我在MXML狀態:

<s:states> 
    <s:State name="LoginMode_Default"/> 
    <s:State name="PerviewMode"/> 
</s:states> 

我的登錄表單MXML:

 <s:BorderContainer id="login_BC" x="1" y="1" width="223" height="134" 
          x.LoginMode_Default="2" y.LoginMode_Default="9" 
          height.LoginMode_Default="152" height.PerviewMode="40"> 


       <s:Form id="loginForm" x="5" y="7" width="212" height="133" 
        x.LoginMode_Default="4" y.LoginMode_Default="5" excludeFrom="PerviewMode"> 
        <s:layout> 
         <s:BasicLayout/> 
        </s:layout>     
        <s:Label x="0" y="14" width="52" height="18" text="SAP no :" paddingTop="5"/>       
        <s:TextInput id="userSAP_field" x="74" y="10" width="108"/> 
        <s:Label x="0" y="52" text="Password :" paddingTop="5"/> 
        <s:TextInput id="userPassword_field" x="73" y="48" width="109" height="21" displayAsPassword="true"/>      
       <s:Button id="loginButton" x="6" y="82" label="Login" click="validateLogin()" />       
      </s:Form> 

      <s:HGroup includeIn="PerviewMode" width="245" height="41"> 
       <s:Label id="welcome_text" text="Welome your name" paddingTop="12" paddingLeft="10"/> 
       <mx:LinkButton label="logout" click="logOff()" paddingTop="6"/>     
      </s:HGroup> 

     </s:BorderContainer> 

我validateLogin功能:

private function validateLogin():void { 

var vResult1:ValidationResultEvent; 
var vResult2:ValidationResultEvent; 

vResult1 = userPasswordValidator.validate(); 
vResult2 = userSAPValidator.validate(); 

if (vResult1.type==ValidationResultEvent.VALID && vResult2.type == ValidationResultEvent.VALID) {  
    this.currentState = "PerviewMode"; 

} 
else{  
    this.currentState = "LoginMode_Default";   
} 

}

我的註銷功能:

private function logOff():void { 
this.currentState = "LoginMode_Default"; 
userPassword_field.text =""; 
userSAP_field.text =""; 

}

+0

這可能幫助.. http://stackoverflow.com/questions/2243582/how-to-remove-validation-programmatically-from-flex-component – 2013-03-04 10:29:24

回答

0

嘗試增加

userSAP_field.errorString = ''; 
userPassword_field.errorString = ''; 

logOff()功能。

+0

您好!不行不行。紅色輪廓消失了,但文本字段中的數據未被清除。我能做什麼 ? – user2017147 2013-03-04 08:35:30

+0

你的函數中是否還有'userSAP_field.text =「」;'和'userPassword_field.text =「」;''? – Art 2013-03-04 08:55:34

+0

@Art ..是的,它現在工作..後添加userSAP_field.errorString ='';和userSAP_field.text =「」;謝謝你喔:) – user2017147 2013-03-04 23:20:07

0

當你改變的TextInput文本,驗證支票的價值。嘗試關閉所需的選項,然後明確的TextInput:

private function logOff():void { 
     this.currentState = "LoginMode_Default"; 

     userSAPValidator.required = false; 
     userPasswordValidator.required = false; 

     userSAP_field.text =""; 
     userPassword_field.text =""; 

     userSAPValidator.required = true; 
     userPasswordValidator.required = true; 
} 
+0

謝謝!這個解決方案也適用! :) – user2017147 2013-03-04 23:22:17

相關問題