Of course I understand that. You would need to override the = method
to do a deep comparison for custom objects.

So, to boil down this whole thread:
If you have simple strings in your arrayCollection, you can use:

myComboBox.selectedItem = mySimpleString;

If you have objects in your arrayCollection, you have to use a loop
(Or a method on a custom object) to check for equality and use the
index of the found item to set the myComboBox.selectedIndex.


--- In flexcoders@yahoogroups.com, "Haykel BEN JEMIA" <[EMAIL PROTECTED]>
wrote:
>
> This works because strings are compared by value. It wouldn't work
for other
> objects, which are compared by reference!
> 
> var s1:String = "My String";
> var s2:String = "My String";
> 
> s1 == s2 returns true, this will work!
> 
> var l1:Label = new Label();
> l1.text = "My String";
> 
> var l2:Label = new Label();
> l2.text = "My String";
> 
> l1 == l2 returns false, this won't work!
> 
> 
> 
> On Thu, Oct 9, 2008 at 3:52 PM, valdhor <[EMAIL PROTECTED]> wrote:
> 
> >   Tracy
> >
> > The ComboBox dataProvider is set from a RemoteObject call that
returns an
> > array of strings that are the unique "Platforms" in the database.
> >
> > eg. SELECT Platform FROM theDB WHERE Platform IS NOT NULL ORDER BY
Platform
> > while ($row = fetchAssoc())
> > {    $platformsArray[] = $row['Platform']    }
> > return array_unique($platformsArray)
> >
> > Further on in the code I get an ID from an event sent to this
component. I
> > make a call on the database which returns an SDActionItem object
(DTO) that
> > has two string fields and two int fields. One of the string fields
is the
> > "Platform"  that this SDActionItem object belongs to.
> >
> > There is no reference between the ComboBox dataProvider and
> > SDActionItem.platform. The only correlation between them is that
> > SDActionItem.platform string is the same (textually) as one of the
items in
> > the ComboBox dataProvider.
> >
> >
> > When I get this back I want to set the ComboBox selectedItem to
this string
> > so I do:
> >
> > platformComboBox.selectedItem = SDActionItem.platform;
> >
> > This works but I don't know why (Other than it makes sense to me
that it
> > should work this way).
> >
> > I put together a little demo. Should it or shouldn't it work? As
you can
> > see currentSelection is a string set to "Scotland" initially.
There is no
> > reference to the comboBox dataprovider. When the comboBox is
created, its
> > selectedItem is set to this string.
> >
> > <?xml version="1.0" encoding="utf-8"?>
> > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> > layout="vertical">
> >     <mx:Script>
> >         <![CDATA[
> >             import mx.controls.ComboBox;
> >
> >             private var currentSelection:String = "Scotland";
> >             private var countryComboBox:ComboBox;
> >
> >             private function addCombo():void
> >             {
> >                 countryComboBox = new ComboBox();
> >                 countryComboBox.dataProvider = countryAC;
> >                 countryComboBox.rowCount = countryAC.length;
> >                 countryComboBox.selectedItem = currentSelection;
> >                 countryFormItem.addChild(countryComboBox);
> >             }
> >
> >             private function removeCombo():void
> >             {
> >                 currentSelection =
countryComboBox.selectedItem.toString();
> >                 countryFormItem.removeChild(countryComboBox);
> >             }
> >         ]]>
> >     </mx:Script>
> >     <mx:ArrayCollection id="countryAC">
> >          <mx:String>United States</mx:String>
> >          <mx:String>Australia</mx:String>
> >          <mx:String>England</mx:String>
> >          <mx:String>Ireland</mx:String>
> >          <mx:String>Scotland</mx:String>
> >          <mx:String>Wales</mx:String>
> >       </mx:ArrayCollection>
> >     <mx:Form>
> >         <mx:FormItem id="countryFormItem" label="Country: "
> > fontWeight="bold"/>
> >     </mx:Form>
> >     <mx:Button label="Add Combo" click="addCombo()"/>
> >     <mx:Button label="Remove Combo" click="removeCombo()"/>
> > </mx:Application>
> >
> >
> > --- In flexcoders@yahoogroups.com, "Tracy Spratt" <tspratt@> wrote:
> > >
> > > No, that should not work unless SDActionItem.platform is a
reference to
> > > an item in the ComboBox dataProvider.
> > >
> > >
> > >
> > > Tracy
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > > ________________________________
> > >
> > > From: flexcoders@yahoogroups.com
[mailto:[EMAIL PROTECTED] On
> > > Behalf Of valdhor
> > > Sent: Wednesday, October 08, 2008 12:31 PM
> > > To: flexcoders@yahoogroups.com
> > > Subject: [flexcoders] Re: ComboBox in Component won't open to Saved
> > > Value
> > >
> > >
> > >
> > > Tracy
> > >
> > > I must be missing something here.
> >
> > >
> > > I have a combobox with a dataprovider of an arraycollection that is
> > > returned from a MySQL database. This is populated on
creationcomplete.
> > > Once this arrayCollection is populated I make another call to get
> > > specific data. Part of this data is a field that corresponds to an
> > > item in the combobox.
> > >
> > > When the second call returns, all I do is:
> > >
> > > platformComboBox.selectedItem = SDActionItem.platform;
> > >
> > > SDActionItem is the DTO returned from the second call and
platform is
> > > one of it's fields that correspond to an item in the combobox.
> > >
> > > This works every time and I do not have to loop through the data
> > > provider.
> > >
> > > Are you telling me that this should not work?
> > >
> > > --- In flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com<flexcoders%2540yahoogroups.com>
> > >
> > > , "Tracy Spratt" tspratt@ wrote:
> > > >
> > > > ComboBox.selectedItem will only work if you assign a
*reference to an
> > > > item in the ComboBox dataProvider*. This is rarely possible
and is not
> > > > in your case.
> > > >
> > > >
> > > >
> > > > What you must do is loop over the items in the
CobmoBox.dataProvider
> > > and
> > > > compare the appropriate property's value to the value you want to
> > > match.
> > > > When a match is found, use the loop indes to set the ComboBox's
> > > > selectedIndex. This is simple enough to do in a one-off situation.
> > > >
> > > >
> > > >
> > > > If you need this often, then you might want to use an extended
> > > ComboBox.
> > > > Making a generic one is a bit tricky, because the Combo Box
> > > dataProvider
> > > > items can have any properties at all. I have an example on
> > > > www.cflex.net <http://www.cflex.net/ <http://www.cflex.net/> > (it
> > > allows you to set the data
> > > > field you want to match) and Ben forta has done one and there are
> > > > others.
> > > >
> > > >
> > > >
> > > > Tracy
> > > >
> > > >
> > > >
> > > > ________________________________
> > > >
> > > > From: flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com<flexcoders%2540yahoogroups.com>
> > >
> > > [mailto:flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com<flexcoders%2540yahoogroups.com>
> > >
> > > ] On
> > > > Behalf Of Dan Pride
> > > > Sent: Wednesday, October 08, 2008 10:01 AM
> > > > To: flexcoders@yahoogroups.com
<mailto:flexcoders%40yahoogroups.com<flexcoders%2540yahoogroups.com>>
> >
> > > > Subject: [flexcoders] ComboBox in Component won't open to
Saved Value
> > > >
> > > >
> > > >
> > > > Hi
> > > > I have a ComboBox used as a Popup on a form component.
> > > > It saves fine using the following function
> > > >
> > > > private function closeGenderPop(event:Event):void {
> > > > ComboBox(event.target).selectedItem.label};
> > > >
> > > >
> > > > I want to have it display the stored value the next time it is
opened.
> > > > I tried this but no luck.
> > > >
> > > > private function openGenderPop(event:Event):void {
> > > > genderPop.selectedIndex = 1;
> > > > ComboBox(event.target).selectedItem.label; }
> > > >
> > > > Really appreciate the help
> > > >
> > > > Dan Pride
> > > >
> > >
> >  
> >
> 
> 
> 
> -- 
> Haykel Ben Jemia
> 
> Allmas
> Web & RIA Development
> http://www.allmas-tn.com
>


Reply via email to