Or just call isValid again when the remoteobject returns.

 

BTW, sending SQL across from your Flex app to your remote object is generally considered a bad idea from a security standpoint.  You want to just call a general method on your RO that can build the SQL for you (preferably using a PreparedStatement or whatever the .Net equivalent is).

 

Matt

 


From: [email protected] [mailto:[email protected]] On Behalf Of bhaq1972
Sent: Thursday, May 12, 2005 8:16 AM
To: [email protected]
Subject: [flexcoders] Re: Lose reference to my Validator object after an asynchronous call

 

thanks for your response. I will look at isStructureValid(). I used
it ages ago but the example i tried from the flex docs wasn't making
any async calls. but i will take a look again.

--- In [email protected], "jgserrault" <[EMAIL PROTECTED]> wrote:
> Could you perhaps just use/call the isStructureValid() function of
> the validator class whenever you return from the remote call. 
Seems
> like it might be the easiest way to deal with this AND just give
one
> last check of the form fields.
>
>
> --- In [email protected], "bhaq1972" <[EMAIL PROTECTED]> wrote:
> > Hi
> >
> > I'm doing an async call (using the Pending call procedure) in my
> > extended TextInput (which has a <mx:Validator> object attached).
> >
> > I save the validator object reference in a class variable (so i
can
> > use it in the result handler later on), but when I return to the
> > result handler i dont get the red box appearing.
> >
> > I have a work around for this but i wanted to make sure i wasn't
> > doing something wrong.
> >
> > Here's some test code. You will need to make your own async call
> > (mine's checking to see if a code exists and returning a
> > description...standard stuff!).
> >
> >
> > test.mxml
> > ---------
> > <?xml version="1.0" encoding="utf-8"?>
> > <mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml"
> > xmlns:nx="*" backgroundColor="#C0DCC2">
> >
> >   <mx:RemoteObject id="remote1"
> > endpoint="http://localhost/flashremoting/gateway.aspx"
> > source="FlexTestClassLibrary.Class1" showBusyCursor="true"
> > fault="alert(event.fault.faultstring, 'Error')"/>
> > 
> >   <mx:TextArea id="out" width="200" height="100" text="(1)Enter
> > anything (except 'test') into 1st textinput. this gives a redbox
[a
> > synchronous validation]. (2)Enter an invalid code into the 2nd
> > textinput [asynchronous validation]"/>
> >
> >   <mx:Panel title="anothertest" height="150" >
> >     <mx:FormItem label="sync:" required="true">
> >       <nx:myTextInput id="ti_1"/>
> >     </mx:FormItem>
> >     <mx:FormItem label="async" required="true">
> >       <nx:myTextInput id="ti_2" lookup="true"/>
> >     </mx:FormItem>
> >     <mx:Text id="text1"/>
> >   </mx:Panel>
> >
> > </mx:Application>
> >
> >
> >
> > myTextInput.mxml
> > ----------------
> > <mx:TextInput xmlns:mx="http://www.macromedia.com/2003/mxml" >
> >
> > <mx:Model id="theModel">
> >   <text>{text}</text>
> > </mx:Model>
> >
> >
> > <mx:Validator field="theModel.text" validate="customValidate(
> > event.validator, event.value )" listener="this" />
> >
> >
> > <mx:Script>
> > <![CDATA[
> >
> >       public var lookup:Boolean=false; // can be set in test.mxml
> >       private var validator;
> >      
> >       function customValidate( validator, value )
> >       {
> >            
> >             if(!lookup) //synchronous validation
> >             {
> >                   if(value != "test")
> >                   {
> >                         validator.validationError(
> > null, "need to enter the word 'test'", null );
> >                   }
> >             }
> >             else //asynchronous validation
> >             {
> >                   // save the refernce to validator to be used
> > in result handler
> >                   this.validator = validator;
> >
> >                   // do db lookup
> >                   var remote1 =
> > mx.core.Application.application.remote1;
> >                   var sql:String = "select DESCRIPTION from
> > PRODUCT where CODE='" + value + "'";
> >
> >                   var call = remote1.GetDescription(sql);
> >                   call.>
> > (this, returnDBLookup);
> >             }
> >       }
> >
> >       function returnDBLookup(result)
> >       {
> >             // if nothing returned show red box
> >             if(result.length <= 0)
> >             {
> >                   this.validator.validationError(
> > null, "you've enterd an invalid code", null );
> >                   mx.core.Application.application.text1.text
> > = "DB LOOKUP ERROR";
> >             }
> >             else
> >             {
> >                   mx.core.Application.application.text1.text =
> > result.getItemAt(0).DESCRIPTION;
> >             }
> >       }
> >
> >       ]]>
> > </mx:Script>
> >
> > </mx:TextInput>





Yahoo! Groups Links

Reply via email to