The prompt property helps simplify things a bit, but doesn't solve the problem.
In fact, it seems to create its own problem. When I use the prompt in conjunction with a combobox using the data provider / labelField... it now highlights the first 2 options (the prompt and the first option from the webservice) whenever item 0 is selected! Works like a champ when the combobox has all string items, though... Regardless of that cosmetic issue, the real problem is that the modelChanged event (I'm guessing that is the one) seems to also trigger validation. So even though we aren't firing off a change event because we won't have to set the selectedIndex, we are still triggering validation when the combobox gets populated. That's the bit I'm trying to avoid. I don't want the box to turn red until the user actually makes a selection, or when we call isSelectionValid(). Any ideas? Thanks again. -Tim. >From: "Matt Chotin" <[EMAIL PROTECTED]> >Reply-To: [email protected] >To: <[email protected]> >Subject: RE: [flexcoders] bypass the change event >Date: Wed, 22 Jun 2005 22:38:28 -0700 > >What if you used the ComboBox prompt property instead and only set the >selectedIndex if you have a real value? It might avoid the change event >firing there too. > > > >Matt > > > >________________________________ > >From: [email protected] [mailto:[EMAIL PROTECTED] On >Behalf Of dwellet >Sent: Wednesday, June 22, 2005 1:43 PM >To: [email protected] >Subject: [flexcoders] bypass the change event > > > >I have this combobox. > >The combobox is populated by a webservice. > >When the webservice result arrives, I have a utility function that >adds a 'Pick an item...' sort of option at the top of the dropdown, >and then selects the appropriate selected item. If there is no >appropriate selected item, it picks index 0 (the dummy 'Pick an >item...'). > >I have a validator that validates that the combobox has a real >selection. > >The problem is... I want my utility function to happen in "stealth" >mode. If the user changes the combobox, I want it to be validated. But >if I programatically set the selectedIndex, I don't want any events to >fire and trigger validation. > >Ironically, I read that in Flex 1.0, changing the selectedIndex did >not fire a change event, but this was "fixed" in 1.5. The old behavior >is precisely what I want. Any way to temporarily bypass that change >event firing? > >Code included below... Thanks for your help! > >-Tim. > > > > >[ComboBoxValidator.as] > > >import mx.controls.*; >import mx.validators.*; > >/* ComboBoxValidator >* >* Validate that a user does not select the dummy option (eg. >* 'Pick a value...') in a required combobox. >* >*/ >class ComboBoxValidator extends Validator >{ > public function doValidation(foo:String) : Void > { > var n = Number(foo); > if (n == 0) > { > validationError("noSelection", "Field is required.", null); > } > } >} > > > > > >[Test.mxml] > > ><mx:Application xmlns:mx="http://www.macromedia.com/2003/mxml" > xmlns:dom="*" > creationComplete="start()"> > > <mx:Script> > <![CDATA[ > import mx.controls.*; > import mx.containers.*; > import mx.managers.*; > import mx.validators.*; > > import com.dom.sampling.vo.*; > > var model : SampleSite; > > var PICK_A_FACILITY_TYPE : FacilityType; > > /* start() > * > * Perform basic setup. > * > */ > function start() > { > PICK_A_FACILITY_TYPE = new FacilityType(); > PICK_A_FACILITY_TYPE.name = "Choose a facility type..."; > service.getAllFacilityTypes(); > > if (!model) > { > model = new SampleSite(); > } > } > > /* prepareCombobox() > * > * Prepares a combobox by adding a first, descriptive > * option (eg. 'Pick a value...') to the dropdown. It > * also sets the initial value of the combobox, either > * to the item matching the passed in initialValue, or > * if no match is found, to the first item in the > * combobox. > * > * @param combobox the combobox to prepare > * > * @param pickAValue the first, descriptive option > * (eg. 'Pick a value...') to add > * to the combobox > * > * @param initialValue the initialValue the combobox > * should be set to > */ > public function prepareComboBox(combobox: ComboBox, > pickAValue: Object, > initialValue: Object) : Void > { > if (pickAValue) > { > combobox.addItemAt(0, pickAValue); > combobox.selectedIndex = 0; > } > > if (initialValue) > { > for (var i=0; i < combobox.length; i++) > { > var item = combobox.getItemAt(i); > > // object > if (item instanceof Object && > item.id == initialValue.id) > { > combobox.selectedIndex = i; > } > > // non-object > else if (item == initialValue) > { > combobox.selectedIndex = i; > } > } > } > } > > ]]> > </mx:Script> > > <mx:WebService id="service" > wsdl="/sampling-ws/services/LocationService?wsdl" > showBusyCursor="true"> > > <mx:operation name="getAllFacilityTypes" > result="prepareComboBox(facilityType, >PICK_A_FACILITY_TYPE, model.facilityType)"/> > > </mx:WebService> > > <mx:Panel title="Administer Sample Site" width="100%"> > <mx:FormItem width="100%" required="true" label="Facility >Type"> > <mx:ComboBox id="facilityType" >dataProvider="{service.getAllFacilityTypes.result}" >labelField="name"/> > </mx:FormItem> > </mx:Panel> > > <mx:Model id="validationModel"> > <facilityType>{facilityType.selectedIndex}</facilityType> > </mx:Model> > > <dom:ComboBoxValidator required="true" >field="validationModel.facilityType"/> > ></mx:Application> > > > > > >________________________________ > >Yahoo! Groups Links > >* To visit your group on the web, go to: > http://groups.yahoo.com/group/flexcoders/ > >* To unsubscribe from this group, send an email to: > [EMAIL PROTECTED] ><mailto:[EMAIL PROTECTED]> > >* Your use of Yahoo! Groups is subject to the Yahoo! Terms of >Service <http://docs.yahoo.com/info/terms/> . > -- Flexcoders Mailing List FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.com Yahoo! Groups Links <*> To visit your group on the web, go to: http://groups.yahoo.com/group/flexcoders/ <*> To unsubscribe from this group, send an email to: [EMAIL PROTECTED] <*> Your use of Yahoo! Groups is subject to: http://docs.yahoo.com/info/terms/

