2009-07-29 9 views
1

Ich habe eine Flex 3-App mit einer Ansicht in einem Viewstack, und diese Ansicht muss nur erstellt werden, wenn angefordert. Ich habe Validatoren für jedes Steuerelement in der Ansicht deklariert und ich habe eine Methode namens checkAllValid() erstellt, die Validator.validateAll() ausführt. Das funktioniert großartig, wenn ich die Steuerelemente tatsächlich verwende (mit den Ereignissen change oder focusOut), aber wie kann checkAllValid() ausgeführt werden, wenn die Ansicht dem Benutzer zum ersten Mal angezeigt wird, so dass sofort angezeigt wird, was einmal ungültig ist Die Daten sind in den Steuerelementen enthalten?Wie erzwinge Flex-Validierung, wenn ein Container angezeigt wird

Ich habe versucht, auf der Ansicht, um den Anruf an verschiedenen Veranstaltungen setzen sich (zB creationComplete-, update, show, aktiviert, etc.), aber es zeigt immer die folgende Fehlermeldung, wenn ich die Anwendung zu starten:

‚The Das Quellenattribut muss angegeben werden, wenn das Eigenschaftsattribut angegeben wird. '

Ich habe auch versucht, die creationPolicy auf die Sicht auf "alle" zu setzen, aber das hilft nicht.

Einige der Validatoren sind nur dann aktiviert, wenn das Formular in einem bestimmten Zustand ist, aber ich habe beseitigt, dass wie durch Kommentare aus allen meinen Validierer mit Ausnahme dieses einfachsten das potenzielle Problem ist eines:

<mx:Array id="validators"><mx:StringValidator id="val_Address1" source="{Address1}" property="text" required="true" triggerEvent=""/></mx:Array> 

die checkAllValid() Methode so einfach ist wie folgt:

private function checkAllValid():void{    
     var validationErrors: Array = Validator.validateAll(validators);   
} 

ich auch versucht haben, direkt mit dem einzigen Validator Aufruf anstatt validateAll und das Ergebnis ist das gleiche.

Bitte helfen! Es muss einen Weg geben ich die Ansicht zwingen kann, zu überprüfen, wenn es angezeigt wird ....

(übrigens in seiner Cairngorm MVC-Framework und I-Daten zu den Kontrollen gebunden haben)

Antwort

0

Verstanden! Ich fügte ähnliche Validatoren zu einer anderen Ansicht hinzu und sie funktionierten gut. Was war der Unterschied? Die Methode, die checkAllValid() aufgerufen hat, wurde für das Ereignis creationComplete eines internen Containers aufgerufen - nicht die Hauptansichtskomponente.

Also am Ende hat es nichts mit der Validierung selbst zu tun - nur ich nicht vollständig die Erstellungsreihenfolge zu verstehen.

Ich lasse die Frage hier für den Fall, dass jemand ein ähnliches Problem mit der Erstellungsreihenfolge auftritt.