Yes, casting does not actually convert anything from one type to
another. Casting simply allows you to refer to an object by a type
that it already is, but that its not specifically defined as.

I know that sounds confusing, so let me explain a bit. You could have
a method that accepted an argument of type Animal, because you want to
be able to send any subtype of Animal to the function, such as Dog,
Cat, Fish, etc. Inside that function, if you wanted to call methods
that were specific to the subclass passed in, you could do a check and
then a cast. So maybe the method body would look like this:

animalArg.feed();

// specific actions
if(animalArg is Dog){
var dog:Dog = Dog(animalArg);
dog.walk();
}
else if(animalArg is Fish){
var fish:Fish = Fish(animalArg);
fish.flush();
}

Also, I don't think the as operator is exactly the same as a cast but
its very similar and I don't feel like looking up the difference right
now. My suggestion would be to convert your objects when the result is
returned and then not have to worry about casting them later. You can
just make the Position class constructor accept an Object and pull the
properties off of it.

HTH,
Ben



--- In flexcoders@yahoogroups.com, "luciddream54321" <[EMAIL PROTECTED]> wrote:
>
> Hi,
> 
> I'm working with Arash on this project.  Thanks for the suggestions
> but even using these alternate methods for geting the selectedItem the
> cast to a Position object still fails.
> 
> Our dataProvider is an ArrayCollection that is populated by a
> ColdFusion query returned from a RemoteObject call.  The query rows
> are from our positions table but flex is storing the rows as generic
> 'Objects' within the ArrayCollection.  Here is the line we use in our
> RemoteObject result handler:
> 
> positions = event.result as ArrayCollection;  
> 
> Using the debugger we've been able to verify that the Objects in the
> ArrayCollection do have the same public properties as our Position
> value object.
> 
> So is it necessary to convert the query rows into Position objects
> immediately when they come back from ColdFusion rather than casting
> them after we get them out of the ArrayCollection?  How would this be
> done exactly?
> 
> Adam
> 
> --- In flexcoders@yahoogroups.com, "ben.clinkinbeard"
> <ben.clinkinbeard@> wrote:
> >
> > I assume your dataProvider is a collection of Position objects? Is it
> > an ArrayCollection?
> > 
> > Try changing this line
> > 
> > selectedItem = event.currentTarget.dataProvider[selectedRow];
> > 
> > to this
> > 
> > selectedItem =
event.currentTarget.dataProvider.getItemAt(selectedRow);
> > 
> > HTH,
> > Ben
> > 
> > 
> > --- In flexcoders@yahoogroups.com, "arashafrooze" <arash.afrooze@>
> > wrote:
> > >
> > > Hi,
> > > I'm a flex newbie, so please bear with me ...
> > > I have an advanced datagrid with a change property that calls a
> > > function passing it the event.
> > > inside the function i retrieve the selected row and cast it as an
> > > object. then i try to cast this object as, what i call a Position
> > > object. Even though both objects are identical in properties, My
> > > postion object does not get populated and is assigned NULL.
> > > I'm pasting the code to my function. 
> > > Any help is greatly appreciated.
> > > 
> > > 
> > > public function updateSelectedPosition(event:Event):void
> > > {
> > >   var position:Position = new Position();
> > >   var selectedItem:Object;
> > >   var selectedRow:uint = event.target.selectedCells[0].rowIndex;
> > >   selectedItem = event.currentTarget.dataProvider[selectedRow];
> > >   position = selectedItem as Position;
> > > }
> > > 
> > > Thank you all so very much in advance :D
> > >
> >
>


Reply via email to