我有一個簡單的登錄表單,用戶輸入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 ="";
}
這可能幫助.. http://stackoverflow.com/questions/2243582/how-to-remove-validation-programmatically-from-flex-component – 2013-03-04 10:29:24