Bem... para resolver o problema da validação ser disparada sempre que
o componente perde o foco você pode usar a propriedade "triggerEvent"
definindo-a como "" (string vazia):

<mx:StringValidator id="valDtIni"
    invalid="Alert.show('Campo COTAÇÃO/DATA INÍCIO não preenche os
requisitos'" triggerEvent=""
    required="true" source="{dtIniC}"
    property="text" />

Mas agora eu começo a questionar se esta solução realmente limpa. Só
pensando um pouquinho melhor para ter uma conclusão mais segura. De
qualquer forma, só fato de eliminar os "ifs" já ajuda.

[]'s
Beck Novaes

On 20 mar, 08:31, Luís Eduardo <[EMAIL PROTECTED]> wrote:
>   Pois é Beck,  eu tb tinha pensado em algo do tipo.
>   Mas o problema dessa abordagem é que o evento "invalid" é disparado
> sempre que o componente source dele perde o foco. Isso faz a usabilidade
> ficar meio prejudicada pq pipoca um Alert muito fácil na tela... e o
> usuário não consegue sair do componente onde ele está nem por reza
> braba. Eu acho q fica menos "intrusivo", por assim dizer, se as
> validações ocorressem só quando o usuário, explicitamente, requisitar um
> erro.  (tipo mandar gravar sem preencher um capo obrigatório).
>   Uma coisa esquisita tb, é que parecem estar sendo gerados 3 eventos
> pra validação da data, usando essa tecnica de colocar o alert dentro do
> invalid, puro e simplesmente.
>
>   Se desse pra desabilitar o alert durante o curso normal da tela mas
> deixar ele aparecer quando o botão do Enviar fosse pressionado, aí sim,
> funcionaria sem os IFs e mesmo assim o balão vermelho apareceria
> normalmente no form...
>   fiz aqui um teste (POG) enquanto estava escrevendo esse email e
> funcionou direitinho...mas ficou um resultado feio e ainda usa um IF pra
> cada validator.
>
> <?xml version="1.0" encoding="utf-8"?>
> <mx:Application
>     width="100%" height="100%"
>     xmlns:mx="http://www.adobe.com/2006/mxml";>
>
>     <mx:Form>
>         <mx:FormItem label="Nome" required="true">
>             <mx:TextInput id="edtNome" width="200"/>
>         </mx:FormItem>
>         <mx:FormItem label="Data Nascimento" required="true">
>             <mx:DateField id="dtNascimento" width="200" editable="true"/>
>         </mx:FormItem>
>     </mx:Form>
>     <mx:Button label="Enviar" click="doEnviar()" />
>
>     <mx:Array id="valArray">
>         <mx:StringValidator id="valNome" source="{edtNome}"
>             invalid="if (podeMostrar) Alert.show('Campo NOME não
> preenche os requisitos')"
>             required="true" property="text"/>
>         <mx:StringValidator id="valDt" source="{dtNascimento}"
>             invalid="if (podeMostrar) Alert.show('Campo DATA NASCIMENTO
> não preenche os requisitos')"
>             required="true" property="text"/>
>     </mx:Array>
>
>     <mx:Script>
>         <![CDATA[
>             import mx.validators.Validator;
>             import mx.controls.Alert;
>
>             private var podeMostrar:Boolean = false;
>
>             private function doEnviar():void {
>                 podeMostrar = true;
>                 if (Validator.validateAll(valArray).length > 0 ) {
>                     // foi um bom menino, pode seguir.
>                 }
>                 podeMostrar = false;
>             }
>         ]]>
>     </mx:Script>
>
> </mx:Application>
>
>     agora fiquei na dúvida qual dos dois jeitos é o menos estranho...
>
>   um abraço,
>
>         Luís Eduardo.
>
> Beck Novaes escreveu:
>
> >Well, uma maneira de eliminar os ifs seria trabalhando com os eventos
> >dos validadores. Algo do tipo:
>
> >    <mx:StringValidator id="valDtIni"
> >            invalid="Alert.show('Campo COTAÇÃO/DATA INÍCIO não preenche os
> >requisitos'"
> >            required="true" source="{dtIniC}"
> >            property="text" />
>
> >    <mx:StringValidator id="valDtFim"
> >            invalid="Alert.show('Campo COTAÇÃO/DATA TÉRMINO não preenche os
> >requisitos'"
> >            required="true" source="{dtFimC}"
> >            property="text" />
>
> >[]'s
> >Beck Novaes
>
> >On 19 mar, 11:26, Luís Eduardo <[EMAIL PROTECTED]> wrote:
>
> >>  mindu,  aqui eu estou fazendo assim:
>
> >> declaração do mxml:
> >><mx:StringValidator id="valDtIni" required="true" source="{dtIniC}"
> >>property="text" />
> >><mx:StringValidator id="valDtFim" required="true" source="{dtFimC}"
> >>property="text" />
>
> >>na "função do AS", eu faço assim:
>
> >>private function funcaoDoAS():void {
> >>if ( valDtIni.validate().type ==  ValidationResultEvent.INVALID ) {
> >>Alert.show("Campo COTAÇÃO/DATA INÍCIO não preenche os requisitos
> >>necessários.", "Atenção");}
>
> >>else if ( valDtFim.validate().type ==  ValidationResultEvent.INVALID ) {
> >>Alert.show("Campo COTAÇÃO/DATA TÉRMINO não preenche os requisitos
> >>necessários.", "Atenção");}
>
> >>else {
> >>  livre pra fazer o que deve ser feito.  ( parece frase de filme de
> >>charles bronson)   :)
>
> >>}
> >>}
>
> >>butt,  eu não sei se assim é o melhor jeito.  (Só sei que funciona redondo).
>
> >>  se mesmo assim não funfar, manda um trecho do teu código que aí fica
> >>mais claro.
>
> >>  se alguém souber de um jeito mais "limpo", com mais estilo e/ou
> >>reusável, seria ótimo ouvir a respeito...  pq num formulario, as vezes é
> >>preciso um monte de validações e fica esse monte de if - else
> >>aninhado...  será que assim é o melhor jeito mesmo???
>
> >>  abraços,
>
> >>       Luís Eduardo.
>
> >>mindu escreveu:
>
> >>>Olá Pessoal,
> >>>Gostaria de saber como funciona a validação de formulário ?
> >>>Criei um exemplo, coloquei alguns campos como 'required', acrescentei
> >>>os validadores para String e Email, acrescentei também um botão
> >>>chamando um função do AS.
> >>>Só que mesmo não preenchendo os campos obrigatórios, a função do botão
> >>>executada, os campos ficam em vermelho, mas a função é executada.
>
> >>>Tem como configurar para executar o método somente depois de todos os
> >>>campos validado ?
>
> >>>[]'s
> >>>mindu


--~--~---------~--~----~------------~-------~--~----~
Você recebeu esta mensagem porque está inscrito na lista "flexdev"
Para enviar uma mensagem, envie um e-mail para [email protected]
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
-~----------~----~----~----~------~----~------~--~---

Responder a