2012-06-18 25 views
3

下面是一個可以運行的自包含應用程序。它只是顯示帶復位按鈕的火花組合框。如果您選擇一個條目,如「紅色」,然後單擊「重置組合框」按鈕,組合框中的選定條目將被清除。但是,它也應該刪除組合框的任何錯誤消息,但此錯誤消息不會被刪除。再次單擊重置按鈕將刪除該錯誤。Flex:如何用驗證器重置火花組合框?

任何人都知道不需要再次單擊重置按鈕的解決方案?

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> 
<fx:Declarations> 
    <mx:NumberValidator id="valCB" source="{myCB}" 
         property="selectedIndex" minValue="0" 
         lowerThanMinError="This field is required."/> 
</fx:Declarations> 

<fx:Script> 
    <![CDATA[ 
     import mx.events.ValidationResultEvent; 
     import mx.validators.*; 

     private function resetCB():void { 
      valCB.enabled=false; <!-- disable validator --> 
      myCB.selectedIndex=-1; <!-- reset selected entry --> 
      valCB.enabled=true; <!-- enable validator --> 
      myCB.errorString=""; <!-- clear error msg --> 
     } 
    ]]> 
</fx:Script> 

<s:Form id="myForm">     
    <s:layout> 
     <s:FormLayout gap="-5"/> 
    </s:layout> 
    <s:FormItem label="Select a Color" required="true"> 
     <s:ComboBox id="myCB" width="140" prompt="Select a Color"> 
      <s:dataProvider> 
       <mx:ArrayList> 
        <fx:String>Red</fx:String> 
        <fx:String>Blue</fx:String> 
        <fx:String>Green</fx:String> 
       </mx:ArrayList> 
      </s:dataProvider> 
     </s:ComboBox> 
    </s:FormItem> 
</s:Form> 
<s:Button label="Reset Combo Box" x="60" y="60" click="resetCB()"/> 
</s:Application> 

回答

2

這看起來像Adobe的一部分對我來說,雖然我不確定預期的行爲是否會讓它在第一次點擊時工作,或根本不工作。您正在將selectedIndex設置爲您的驗證器不允許的值,並啓用驗證程序並期望驗證程序不驗證。我不確定我期望會發生什麼。

只需在click事件中禁用驗證器,然後在change事件中重新啓用驗證器可能會更好。從復位功能刪除valCB.enabled=true;(和myCB.value = -1;,因爲該值將已經-1):

private function resetCB():void { 
    valCB.enabled=false; <!-- disable validator --> 
    myCB.errorString=""; <!-- clear error msg --> 
} 

,並給予ComboBox一個change事件:

<s:ComboBox id="myCB" width="140" prompt="Select a Color" change="enableValidate()"> 

,然後啓用該事件驗證:

protected function enableValidate():void 
{ 
    valCB.enabled=true; 
} 
+0

我也嘗試在resetCB()中設置'lowerThanMinError ='「',希望在驗證器運行時它會再次設置回」此字段是必需的「,但它在永久保持空着之後。希望有一個簡單的解決方案。我希望驗證程序能夠始終運行,但事後才能清除錯誤。不知道你的意思是禁用點擊並重新啓用更改(你可以修改代碼?)。 – ggkmath

+0

感謝CheeseWarlock,但沒有'myCB.selectedIndex = -1;'沒有什麼可以將組合框中的選擇重置爲空。我認爲,除了你的改變之外,如果我們只是在resetCB()中插入'myCB.selectedIndex = -1;',它就可以工作。 – ggkmath

+0

是的,它現在可以工作,但需要包含'myCB.selectedIndex = -1;'在resetCB()中,以及其他更改。非常感謝CheeseWarlock,我確信我自己不會想到這個解決方案。 – ggkmath

0

您應該將control errorString設置爲空。這應該夠了吧。

+0

其實我試過你的代碼和令人驚訝的清除錯誤字符串沒有做到這一點。嗯... –

+0

是的,我設置了上面的errorString =「」,但它似乎只幫助第二次點擊重置按鈕(不知道爲什麼)。 – ggkmath