Que tal uma solução sem "switch case", sem "if" e bem simples de
entender?

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";>

        <mx:Script>
                <![CDATA[

                        import flash.utils.describeType;

                        private function 
cleanClickHandler(event:MouseEvent):void
                        {
                                var thisInfo:XML = describeType(this);
                                cleanAllTextInput(thisInfo.accessor.(@type ==
"mx.controls::TextInput"));
                                cleanAllComboBox(thisInfo.accessor.(@type ==
"mx.controls::ComboBox"));
                                cleanAllDateField(thisInfo.accessor.(@type ==
"mx.controls::DateField"));
                        }

                        private function 
cleanAllTextInput(textInputXMLList:XMLList):void
                        {
                                for each (var node:XML in textInputXMLList)
                                {
                                        TextInput([EMAIL PROTECTED]).text = "";
                                }
                        }

                        private function 
cleanAllComboBox(comboBoxXMLList:XMLList):void
                        {
                                for each (var node:XML in comboBoxXMLList)
                                {
                                        ComboBox([EMAIL 
PROTECTED]).selectedIndex = -1;
                                }
                        }

                        private function 
cleanAllDateField(dateFieldXMLList:XMLList):void
                        {
                                for each (var node:XML in dateFieldXMLList)
                                {
                                        DateField([EMAIL 
PROTECTED]).selectedDate = null;
                                }
                        }

                ]]>
        </mx:Script>

        <mx:Form>

        <mx:FormHeading label="Enter values into the form."/>

        <mx:FormItem label="First TextInput">
            <mx:TextInput id="textInput1"/>
        </mx:FormItem>

        <mx:FormItem label="Second TextInput">
            <mx:TextInput id="textInput2"/>
        </mx:FormItem>

        <mx:FormItem label="First ComboBox">
           <mx:ComboBox id="comboBox1" prompt="Select">
                        <mx:dataProvider>
                                <mx:String>Item 1</mx:String>
                                <mx:String>Item 2</mx:String>
                                <mx:String>Item 3</mx:String>
                        </mx:dataProvider>
           </mx:ComboBox>
        </mx:FormItem>

        <mx:FormItem label="Second ComboBox">
           <mx:ComboBox id="comboBox2" prompt="Select">
                        <mx:dataProvider>
                                <mx:String>Item 1</mx:String>
                                <mx:String>Item 2</mx:String>
                                <mx:String>Item 3</mx:String>
                        </mx:dataProvider>
           </mx:ComboBox>
        </mx:FormItem>

        <mx:FormItem label="First DateField">
                <mx:DateField id="dateField1"/>
        </mx:FormItem>

        <mx:FormItem label="Second DateField">
                <mx:DateField id="dateField2"/>
        </mx:FormItem>

    </mx:Form>

    <mx:Button label="Clean" click="cleanClickHandler(event)"/>

</mx:Application>


Como no exemplo do Mário, para esta solução não importa a hierarquia
de Containers que você tem.

Mas é claro, esta solução também tem suas limitações:

1. Você precisa sempre fornecer "id" para os controles que quer limpar

2. Se você usar isto no Application, você não pode ter outros
controles exceto aqueles que você quer limpar. Você pode resolver este
problema colocando o seu form em um Componente isolado.


[]'s
Beck Novaes


On Jun 25, 12:32 am, hassan <[EMAIL PROTECTED]> wrote:
> Vi esse exemplo que demonstra testando campos do tipo TextInput
>
> http://www.igorcosta.com/blog/?p=603
>
> Nesse outro exemplo, tem uma base de código testanto varios tipos de
> campos
>
> http://fiote.wordpress.com/2008/02/27/formulario-personalizado/
>
> Mas não funciona a funcção limparForm() dá um erro logo no começo em
> "if (child is Campo){" informando que a variavel Campo não existe
>
> Eu queria utilizar a função do igorcosta só que testar o tipo de campo
> usando "switch"
>
> Como devo proceder ?
>
> Eu já tentei
>
> ---------------------------
>
> private function clearFormHandler():void {
> var itensdoForlumario:Array = Form.getChildren();
> for (var i:int = 0; i <itensdoForlumario.length; i++){
>
> var formItem:Object = itensdoForlumario[i].getChildren();
>
> trace("formItem[0].className: " + formItem[0].className);
>
> }
> }
>
> ---------------------------
>
> Mas acontece o seguinte erro
>
> TypeError: Error #1010: A term is undefined and has no properties.
>
> Agora usando
>
> trace("formItem[0]: " + formItem[0]);
>
> é apresentado cada ID de campo, isso é bom para eu poder limpar os
> campos, mas eu preciso saber qual o tipo de campo por exemplo
>
> ---------------------------
>
> switch(formItem[0]){
>
> case "TextInput" || "TextArea": {
> formItem[0].text = "";
> formItem[0].htmlText = "";
> break;
>
> }
>
> case "DateField": {
> formItem[0].selectedDate = null;
> break;
>
> }
>
> case "ComboBox": {
> formItem[0].selectedIndex = 0;
> break;
>
> }
>
> case "NumericStepper": {
> break;
>
> }
>
> case "RadioButton" || "CheckBox": {
> break;
>
> }
> }
>
> ---------------------------
--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para flexdev@googlegroups.com
Para sair da lista, envie um email em branco para [EMAIL PROTECTED]
Mais opções estão disponíveis em http://groups.google.com/group/flexdev
-~----------~----~----~----~------~----~------~--~---

Reply via email to