Wow that title sounds complex. If you don't remember, a few hours ago I blogged about an article that Boyzoid wrote about how easy it was to do a custom component in Flex 2. His example added a new method to ComboBox, selectedItemByValue.
What if you wanted to set the selected item when the component is created? I made these modifications to Zoid's code:
<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="checkSelected()">
<mx:Script>
<![CDATA[
[Bindable] public var defaultSelectedValue:int;
public function selectedItemByValue(val:int):void{
for (var i:int=0;i<this.dataProvider.length;i++){
var item:int = this.dataProvider[i].data;
if(item == val){
this.selectedIndex = i;
break;
} else{ this.selectedIndex = 0;}
}
}
private function checkSelected():void {
selectedItemByValue(defaultSelectedValue);
}
]]>
</mx:Script>
</mx:ComboBox>
Note first the use of creationComplete in the top tag. That just means - run checkSelected() when done. I then created a new public variable named defaultSelectedValue. My checkSelected function simply then calls the function Boyzoid had written. This then lets me do the following in the calling code:
<comp:customComboBox dataProvider="{comboData}" id="myCombo2" defaultSelectedValue="2" />
<comp:customComboBox dataProvider="{comboData}" id="myCombo3" defaultSelectedValue="3" />
<comp:customComboBox dataProvider="{comboData}" id="myCombo4" />
Not sure if this is best practice or not - and I did guess at a few things, but I thought I'd share.
Archived Comments
Ray - That is exactly why I created that custom component to begin with.
Scott - how did you do it? Did I do it right? I mean it works obviously - but do you have any suggestions?
Here's another solution: http://www.forta.com/blog/i...
You should check out the com.adobe.ColdFusion.BindableCombobox and ..BindableList components that are generated when you run the ColdFusion/Flex application wizard too.
It does the same thing, except it does it by adding 1 new property "valueField" to know which property of the dataprovider 'objects' to compare against. And it sets the data value by overriding the selectedItem property.
You should check out the com.adobe.ColdFusion.BindableCombobox and ..BindableList components that are generated when you run the ColdFusion/Flex application wizard too.
It does the same thing, except it does it by adding 1 new property "valueField" to know which property of the dataprovider 'objects' to compare against. And it sets the data value by overriding the selectedItem property.
Thanks for the pointer Mike. Is there a "CFLib for Flex" yet?
not sure, however, there is a developers exchange for flex on adobe.com. (last I checked there was only 1 entry).
I'll write a blog entry and see what it fleshes out. There -must- be one somewhere. I can't believe there wouldn't be.
hi.
i have problem regarding showing checkboxes in custom combobox in order to do multiselect functionality.
can u please help me ?
thanks in advance.
Has anyone modified this for dataGrids with allowMultipleSelections?
I have several cases where I need to pre-select default items in a dataGrid.
default items come from my CFC. For example, mydefaults.dataProvider is a query containing CategoryID, Category.
mydataGrid.dataProvider also contains CategoryID and Category.
Seems like I'd need to do a nested loop comparing the mydataGrid.dataProvider[i].categoryID to defaults.dataProvider[j].categoryID? or is there an easier way?
I love Flex! But...ColdFusion sure did make life easier with CFSELECT!
Don
Hi everybody, Thanxz for your Example is Great!
I modified to This:
<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="checkSelected()">
<mx:Script>
<![CDATA[
[Bindable]
public var defaultSelectedValue:int;
public function selectedItemByValue(val:int):void{
var item:Object;
for (var i:int=0;i<this.dataProvider.length;i++)
{
item = this.dataProvider[i];
if(item!=null)
{//id= attribute of object.
if (item.id == val)
{
this.selectedIndex = i;
break;
}
else
{
this.selectedIndex = 0;
}
}
}
}
private function checkSelected():void {
selectedItemByValue(defaultSelectedValue);
}
]]>
</mx:Script>
</mx:ComboBox>