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
-~----------~----~----~----~------~----~------~--~---